相关疑难解决方法(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万
查看次数

静态泛型类作为字典

泛型类中的静态字段将为每个泛型参数组合具有单独的值.因此它可以用作Dictionary <Type,无论 >

这是不是一个静态的字典更好或更坏<类型,无论 >?

换句话说,哪些实现更有效?

public static class MethodGen<TParam> {
    public static readonly Action<TParam> Method = CreateMethod();
    static Action<TParam> CreateMethod() { /*...*/ }
}
Run Code Online (Sandbox Code Playgroud)

要么,

public static class MethodGen {
    static readonly Dictionary<Type, Delegate> methods 
              = new Dictionary<Type, Delegate>();

    public static Action<T> GetMethod<T>() {
        //In production code, this would ReaderWriterLock

        Delegate method;
        if(!methods.TryGetValue(typeof(T), out method)
            methods.Add(typeof(t), method = CreateMethod<T>());
        return method;
    }

    static Action<T> CreateMethod<T>() { /*...*/ }
}
Run Code Online (Sandbox Code Playgroud)

特别是,CLR如何通过泛型类型参数查找静态字段?

.net c# generics clr dictionary

17
推荐指数
1
解决办法
3074
查看次数

标签 统计

c# ×2

generics ×2

.net ×1

clr ×1

dictionary ×1

primitive ×1

type-safety ×1