首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用函数根据传递的类型创建类的实例

使用函数根据传递的类型创建类的实例
EN

Stack Overflow用户
提问于 2012-03-23 22:26:42
回答 4查看 68关注 0票数 0

我有这个方法:

代码语言:javascript
运行
复制
internal static void AssignNewArrayItem(ref Xml.CLASSNAME[] Items, Xml.CLASSNAME Item)
{
    if (Items != null)
    {
        Array.Resize(ref Items, Items.Length + 1);
        Items[Items.Length - 1] = Item;
    }
    else
        Items = new Xml.CLASSNAME[] { Item };
}

目前,我有大约10个重载版本,其中CLASSNAME是不同的,但它们都做完全相同的事情。有没有办法让CLASSNAME作为泛型对象,并将var转换为相同的结果?

我对其他建议持开放态度,如果我以错误的方式来做这件事,也会得到同样的结果。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-03-23 22:31:18

代码语言:javascript
运行
复制
internal static void AssignNewArrayItem<T>(ref T[] Items, T Item)
    {
        if (Items != null)
        {
            Array.Resize(ref Items, Items.Length + 1);
            Items[Items.Length - 1] = Item;
        }
        else
            Items = new T[] { Item };
    }
票数 2
EN

Stack Overflow用户

发布于 2012-03-23 22:31:41

你有没有试过这个:

代码语言:javascript
运行
复制
internal static void AssignNewArrayItem<T>(ref T[] Items, T Item)
{
    if (Items != null)
    {
        Array.Resize(ref Items, Items.Length + 1);
        Items[Items.Length - 1] = Item;
    }
    else
        Items = new T[] { Item };
}

我认为在这里使用List<T>会是更好的选择。

票数 2
EN

Stack Overflow用户

发布于 2012-03-23 22:31:39

我相信这应该行得通。正如您建议的那样,只使用泛型即可。为了在你的方法中获得它,你只需在任何地方改变变量类型(它不一定是T,但这是惯例)。

代码语言:javascript
运行
复制
internal static void AssignNewArrayItem<T>(ref T[] Items, T Item)
{
    if (Items != null)
    {
        Array.Resize(ref Items, Items.Length + 1);
        Items[Items.Length - 1] = Item;
    }
    else
        Items = new T { Item };
}

不过,您可能应该将constraints放在该方法上。你有你想要的基类型吗?如果是这样,您可以这样做:

代码语言:javascript
运行
复制
internal static void AssignNewArrayItem<T>(ref T[] Items, T Item) 
    where T : <base class name>
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9840940

复制
相关文章

相似问题

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