using System;
using System.Collections.Generic;
using System.Linq;
public interface IValue
{
int Id { get;}
}
public class SpecificValue : IValue
{
public int Id { get { return 3; } }
public string Val { get; set; }
}
public abstract class MustImplement
{
public abstract IEnumerable<IValue> GetValues(int number);
}
public class SpecificClass : MustImplement
{
public override IEnumerable<IValue> GetValues(int number)
{
var rv = new List<SpecificValue>();
rv.Add(new SpecificValue()
{Val = number + "Test"});
return rv;
}
}
public class Program
{
public static void Main()
{
var test = new SpecificClass();
var values = test.GetValues(1).Single();
Console.WriteLine(values.Id);
//Console.WriteLine(values.Val); // This doesnt work
var values2 = test.GetValues(1).Single() as SpecificValue;
Console.WriteLine(values2.Id);
Console.WriteLine(values2.Val); // This works but I dont want to have to cast. values2 is also potentially null now and that's annoying
}
}
https://dotnetfiddle.net/7tA12E
SpecificClass
我想去
SpecificValue
自动地,而不必投射它。
GetValues()
退货不是特定的,取决于每个实施(只要他们遵守合同)
test.GetValues<SpecificValue>(1).Single()
但我仍然相信有一种方法可以返回SpecificValue,而不必在Main()中键入SpecificValue