我今天遇到了一些代码,我试图了解并使用"其中:class"在方法定义中。
代码明显简化。
private class Test
{
public int A { get; set; }
public int B { get; set; }
}
private AB Invoke<AB>() where AB : class
{
return new Test() as AB;
}
private object RunMethod()
{
return new Test();
}
通过以下方式调用每个方法。
// Method1
Test ResultTest = Invoke<Test>();
// Method2
Test ResultTest = RunMethod() as Test;
除了不必投射或使用&#34;以及#34;还有其他任何优点吗? 这叫什么呢?
答案 0 :(得分:2)
答案 1 :(得分:1)
省略where AB : class
会给你编译错误“类型参数'AB'不能与'as'运算符一起使用,因为它没有类类型约束,也没有'class'约束”
as
中的as T
运算符要求T
为引用或可空类型。
答案 2 :(得分:0)
where
是一种为提供给类的任何泛型参数提供编译时检查的方法。它只是确保任何错误的使用都会阻止代码编译,而不是让它在运行时失败。
答案 3 :(得分:0)
有时您需要对通用参数执行操作,在某些情况下,编译器需要知道此通用参数支持这些操作。 “Where”语句告诉编译器有关泛型参数的类型。
例如,在您的情况下,您可以执行以下操作:
private class Test
{
public int A { get; set; }
public int B { get; set; }
}
private AB Invoke<AB>() where AB : new ()
{
return new AB();
}
你可以使用:
Test ResultTest = Invoke<Test>();
无需任何地方。这是可能的,因为我添加了“Where:new()”语句。
“Where:class”告诉传递的参数是一个类(不是结构,值类型,接口或其他非类的东西)。