gdo*_*ica 26 .net c# compiler-construction generics
有没有办法声明泛型类型是type1 还是 type2 的泛型函数?
例:
public void Foo<T>(T number)
{
}
Run Code Online (Sandbox Code Playgroud)
我可以将T约束为int或long
Ada*_*ski 17
对于ReferenceType对象,您可以执行此操作
public void DoIt<T>(T someParameter) where T : IMyType
{
}
Run Code Online (Sandbox Code Playgroud)
...
public interface IMyType
{
}
public class Type1 : IMyType
{
}
public class Type2 : IMyType
{
}
Run Code Online (Sandbox Code Playgroud)
对于你的情况,使用long as参数会将使用限制为long和int无论如何.
public void DoIt(long someParameter)
{
}
Run Code Online (Sandbox Code Playgroud)
限制为可以使用的任何值类型(如:int,double,short,decimal):
public void DoIt<T>(T someParameter) where T : struct
{
}
Run Code Online (Sandbox Code Playgroud)
有关更多信息,您可以在此处查看官方文档
没有.
这没有意义; T在该方法中没有任何可用的编译时类型.
相反,你应该制作两个重载方法.
改为使用重载方法:
public void Foo(int number)
{
}
public void Foo(long number)
{
}
Run Code Online (Sandbox Code Playgroud)
无论如何,您无法对泛型类型执行算术运算.请注意,您可以将int值传递给long参数.它会自动转换为long.因此,只有一个带long参数的方法就足够了.
较旧的编程语言遵循"只能有一个"原则.C#允许您在同一个类,接口或结构中使用多个具有相同名称的方法.这些方法必须具有不同的签名.这意味着它们必须具有不同数量的参数或具有不同类型(或两者)的参数.这称为方法重载.