首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在C#中创建任意数字/基元值类型的非零实例

在C#中创建任意数字/基元值类型的非零实例
EN

Stack Overflow用户
提问于 2014-05-22 13:32:08
回答 1查看 174关注 0票数 1

假设您有一个名为Type with primitiveType.IsPrimitive == trueprimitiveType,那么如何最简洁地(不使用第三方库)创建一个非零值的实例(例如,value = 1)?

也就是说,这个函数看起来可能是:

代码语言:javascript
复制
public static object CreateNonZero(Type primitiveType)
{
    if (!primitiveType.IsPrimitive)
    { throw new ArgumentException("type must be primitive"); }

    // TODO
}

也就是说,它应该适用于所有的原始值类型,如bool、字节、字节、短、ushort、int、uint、long、ulong、float、double、IntPtr、UIntPtr、char等。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-05-22 13:33:41

代码语言:javascript
复制
Convert.ChangeType(1, primitiveType)

注意,如果您希望返回类型与实际类型匹配,而不是成为object,那么执行泛型版本相对容易:

代码语言:javascript
复制
public static T CreateNonZero<T>()
{
    return (T)Convert.ChangeType(1, typeof(T));
}

如果您想处理IntPtrUIntPtr,我不知道有比显式检查类型更优雅的方法了

代码语言:javascript
复制
public static object CreateNonZero(Type type)
{
    if(type == typeof(IntPtr))
        return new IntPtr(1);
    if(type == typeof(UIntPtr))
        return new UIntPtr(1);
    return Convert.ChangeType(1, type);
}
票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23808396

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档