我有这段代码:
public class myList<T> where T : struct
{
public int number { get; set; }
}
public class TypeTest
{
public static int GetNumber(object x)
{
// if (x.GetType() == typeof(myList<>)) // this works BUT I want to use is
if (x is myList<>) // how is the correct syntax for this?
{
int result = ((myList<>)x).numb; //does not compile
return result;
}
return 0;
}
}
但是一些通用的语法问题。
问题:这是什么语法?
答案 0 :(得分:4)
将您的方法重新声明为通用方法会很好:
public static T GetNumber<T>(myList<T> myList) where T : struct
这样做可以避免任何演员阵容,并且该方法的身体将变为单线,如下所示:
return myList?.numb ?? 0;
答案 1 :(得分:3)
您可以按照Testing if object is of generic type in C#中的说明检查对象是否属于您的开放泛型类型,然后获取名为&#34; number&#34;从实际类型:
var typeOfX = x.GetType();
if (typeOfX.GetGenericTypeDefinition() == typeof(myList<>))
{
var numberProperty = typeOfX.GetProperty("number");
var propertyValue = numberProperty.GetValue(x);
return (int)propertyValue;
}
请注意,此代码缺少任何错误处理,例如缺少属性或不属于预期类型的属性。这是因为被迫使用反思而付出的代价。