相关疑难解决方法(0)

通用类型检查

有没有办法强制/限制传递给基元的类型? (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)

c# generics primitive type-safety

71
推荐指数
3
解决办法
3万
查看次数

默认(T)与Activator.CreateInstance(T)

我想知道以下陈述是否会为参考类型返回不同的结果,或者它们是否相同?

  1. default(T)
  2. Activator.CreateInstance(T)

如果它们相同,你是否总能使用默认值(T),在这个例子中,如果目的是输出默认值T?:

if (typeof(T).IsValueType || typeof(T) == typeof(String))
{
     return default(T);
}
else
{
     return Activator.CreateInstance<T>();
}
Run Code Online (Sandbox Code Playgroud)

测试泛型类型是字符串的最佳方法是什么?(C#)

TA!

c# generics

11
推荐指数
2
解决办法
3026
查看次数

标签 统计

c# ×2

generics ×2

primitive ×1

type-safety ×1