Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何从方法返回ICollection?_C#_.net_Collections - Fatal编程技术网

C# 如何从方法返回ICollection?

C# 如何从方法返回ICollection?,c#,.net,collections,C#,.net,Collections,考虑以下方法 public ICollection<int> method() { ICollection<int> col = new List<int>(); return col; } HashSet<int> result = (HashSet<int>) method(); 公共ICollection方法() { ICollection col=新列表(); 返回列; } HashSet结果=(HashSe

考虑以下方法

public ICollection<int> method()
{
    ICollection<int> col = new List<int>();
    return col;
}

HashSet<int> result = (HashSet<int>) method();
公共ICollection方法()
{
ICollection col=新列表();
返回列;
}
HashSet结果=(HashSet)方法();
当然,我会遇到错误“无法将List类型的对象强制转换为HashSet”,因为我在方法()中用List实例化了col


是否可以使用泛型方法,根据我的需要返回ICollection并可以在哈希集或列表中强制转换?

不,您不能直接强制转换它,因为返回的实例不是哈希集或列表以外的任何对象,但是,您可以很容易地使用返回的
ICollection
实例来初始化所需内容的新实例。例如:

ICollection<int> result = Method();
HashSet<int> newHashSet = new HashSet<int>(result);
ICollection result=Method();
HashSet newHashSet=新HashSet(结果);

不,您不能直接强制转换它,因为返回的实例不是
哈希集
或除
列表
以外的任何东西,但您可以轻松使用返回的
ICollection
实例初始化所需的任何新实例。例如:

ICollection<int> result = Method();
HashSet<int> newHashSet = new HashSet<int>(result);
ICollection result=Method();
HashSet newHashSet=新HashSet(结果);

否。返回的对象是列表或哈希集,而不是两者。如果您需要一个或另一个,您的方法应该返回一个或另一个。强制转换方法调用的结果会破坏封装,这不是好的做法。这是我的假设,那么如果我需要用具体的集合实例化ICollection,为什么建议返回ICollection呢?为什么不将返回类型设置为List或HashSet?如果方法的调用方只应该使用ICollection提供的方法,那么是的,最好返回ICollection。通过返回接口,方法的作者正在通信“你不能指望我归还任何特定种类的收藏品;我可能会更改将来返回的收藏类型*。注意这个方法的作者想告诉你什么。返回的对象是列表或哈希集,而不是两者。如果您需要一个或另一个,您的方法应该返回一个或另一个。强制转换方法调用的结果会破坏封装,这不是好的做法。这是我的假设,那么如果我需要用具体的集合实例化ICollection,为什么建议返回ICollection呢?为什么不将返回类型设置为List或HashSet?如果方法的调用方只应该使用ICollection提供的方法,那么是的,最好返回ICollection。通过返回接口,方法的作者正在通信“你不能指望我归还任何特定种类的收藏品;我可能会更改将来返回的收藏类型*。请注意该方法的作者试图告诉您的内容。