有没有办法强制/限制传递给基元的类型? (bool,int,string等)
现在,我知道您可以通过where子句将泛型类型参数限制为类型或接口实现.然而,这不符合基元(AFAIK)的费用,因为它们并非都有共同点(除了某人之前的对象!:P).
所以,我目前的想法只是咬紧牙关并做一个大的switch语句并在失败时抛出ArgumentException.
编辑1:
只是为了澄清:
代码定义应该是:
public class MyClass<GenericType> ....
Run Code Online (Sandbox Code Playgroud)
和实例化:
MyClass<bool> = new MyClass<bool>(); // Legal
MyClass<string> = new MyClass<string>(); // Legal
MyClass<DataSet> = new MyClass<DataSet>(); // Illegal
MyClass<RobsFunkyHat> = new MyClass<RobsFunkyHat>(); // Illegal (but looks awesome!)
Run Code Online (Sandbox Code Playgroud)
编辑2
@Jon Limjap - 好点,我正在考虑的事情......我确信有一个通用的方法可以用来确定类型是值还是引用类型..
这可以用于立即删除我不想处理的很多对象(但是你需要担心使用的结构,比如Size).有趣的问题不是吗?:)
这里是:
where T : struct
Run Code Online (Sandbox Code Playgroud)
取自MSDN.
我很好奇..可以使用扩展方法在.NET 3.x中完成吗?创建一个接口,并在扩展方法中实现接口(这可能比胖胖的开关更干净).此外,如果您稍后需要扩展到任何轻量级自定义类型,它们也可以实现相同的接口,而不需要对基本代码进行任何更改.
你们有什么感想?
可悲的消息是我在Framework 2中工作!! :d
编辑3
从Jon Limjaps Pointer开始,这非常简单.这么简单,我几乎想哭,但它很棒,因为代码就像一个魅力!
所以这就是我所做的(你会笑!):
bool TypeValid()
{ …Run Code Online (Sandbox Code Playgroud) 我想知道以下陈述是否会为参考类型返回不同的结果,或者它们是否相同?
如果它们相同,你是否总能使用默认值(T),在这个例子中,如果目的是输出默认值T?:
if (typeof(T).IsValueType || typeof(T) == typeof(String))
{
return default(T);
}
else
{
return Activator.CreateInstance<T>();
}
Run Code Online (Sandbox Code Playgroud)
TA!