在 foreach 循环之外使用 IEnumerable 列表
using an IEnumerable list outside of foreach loop
我在 for each 循环中使用 IEnumerable
如下:
foreach (IListBlobItem blobItem in container.ListBlobs())
{
if (blobItem is CloudBlobDirectory)
{
CloudBlobDirectory directory = (CloudBlobDirectory)blobItem;
IEnumerable<IListBlobItem> blobs = directory.ListBlobs(true);
}
}
await ProcessBlobs(blobs);
我想在此 foreach 循环之外使用 blobs
变量,但我收到此消息:blobs doesnot exist in the current context
我决定在 foreach 循环之外定义 blobs
:
IEnumerable<IListBlobItem> blobs = new IEnumerable<IListBlobItem>;
foreach (IListBlobItem blobItem in container.ListBlobs())
{
if (blobItem is CloudBlobDirectory)
{
//Console.WriteLine(blobItem.Uri);
CloudBlobDirectory directory = (CloudBlobDirectory)blobItem;
IEnumerable<IListBlobItem> blobs = directory.ListBlobs(true);
}
}
但我收到错误:can not create an instance of the abstract class or interface IEnumerable<IListBlobItem>
你知道我该如何解决这个问题吗?
您可以将 blobs
声明为一个 空集合 ,例如,数组:
// Empty
IEnumerable<IListBlobItem> blobs = new IListBlobItem[0];
foreach (IListBlobItem blobItem in container.ListBlobs())
{
if (blobItem is CloudBlobDirectory)
{
CloudBlobDirectory directory = (CloudBlobDirectory)blobItem;
blobs = directory.ListBlobs(true);
}
}
// process either blobs from foreach or an empty collection
await ProcessBlobs(blobs);
使用default
获取默认值。对于引用类型
,这将 return null
IEnumerable<IListBlobItem> blobs = default(IEnumerable<IListBlobItem>);
https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/operators/default
尝试使用 Enumerable.Empty<TResult>
,像这样:
IEnumerable<IListBlobItem> blobs = Enumerable.Empty<IListBlobItem>();
这将 return 一个空的、非空的可枚举对象。
以这种方式设置 IEnumerable blob,如 属性:
IEnumerable<IListBlobItem> blobs{get;set;}
您正在尝试创建一个不可能的接口对象。相反,将 blobs
声明为对象,然后将其转换为 IEnumerable<IListBlobItem>
.
object blobs = null;
foreach (IListBlobItem blobItem in container.ListBlobs())
{
if (blobItem is CloudBlobDirectory)
{
//Console.WriteLine(blobItem.Uri);
CloudBlobDirectory directory = (CloudBlobDirectory)blobItem;
blobs = directory.ListBlobs(true);
}
}
///usage:
///(IEnumerable<IListBlobItem>)blobs
此外,您可以将 blob 声明为 IEnumerable<IListBlobItem>
其他答案涵盖的内容。
我在 for each 循环中使用 IEnumerable
如下:
foreach (IListBlobItem blobItem in container.ListBlobs())
{
if (blobItem is CloudBlobDirectory)
{
CloudBlobDirectory directory = (CloudBlobDirectory)blobItem;
IEnumerable<IListBlobItem> blobs = directory.ListBlobs(true);
}
}
await ProcessBlobs(blobs);
我想在此 foreach 循环之外使用 blobs
变量,但我收到此消息:blobs doesnot exist in the current context
我决定在 foreach 循环之外定义 blobs
:
IEnumerable<IListBlobItem> blobs = new IEnumerable<IListBlobItem>;
foreach (IListBlobItem blobItem in container.ListBlobs())
{
if (blobItem is CloudBlobDirectory)
{
//Console.WriteLine(blobItem.Uri);
CloudBlobDirectory directory = (CloudBlobDirectory)blobItem;
IEnumerable<IListBlobItem> blobs = directory.ListBlobs(true);
}
}
但我收到错误:can not create an instance of the abstract class or interface IEnumerable<IListBlobItem>
你知道我该如何解决这个问题吗?
您可以将 blobs
声明为一个 空集合 ,例如,数组:
// Empty
IEnumerable<IListBlobItem> blobs = new IListBlobItem[0];
foreach (IListBlobItem blobItem in container.ListBlobs())
{
if (blobItem is CloudBlobDirectory)
{
CloudBlobDirectory directory = (CloudBlobDirectory)blobItem;
blobs = directory.ListBlobs(true);
}
}
// process either blobs from foreach or an empty collection
await ProcessBlobs(blobs);
使用default
获取默认值。对于引用类型
IEnumerable<IListBlobItem> blobs = default(IEnumerable<IListBlobItem>);
https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/operators/default
尝试使用 Enumerable.Empty<TResult>
,像这样:
IEnumerable<IListBlobItem> blobs = Enumerable.Empty<IListBlobItem>();
这将 return 一个空的、非空的可枚举对象。
以这种方式设置 IEnumerable blob,如 属性:
IEnumerable<IListBlobItem> blobs{get;set;}
您正在尝试创建一个不可能的接口对象。相反,将 blobs
声明为对象,然后将其转换为 IEnumerable<IListBlobItem>
.
object blobs = null;
foreach (IListBlobItem blobItem in container.ListBlobs())
{
if (blobItem is CloudBlobDirectory)
{
//Console.WriteLine(blobItem.Uri);
CloudBlobDirectory directory = (CloudBlobDirectory)blobItem;
blobs = directory.ListBlobs(true);
}
}
///usage:
///(IEnumerable<IListBlobItem>)blobs
此外,您可以将 blob 声明为 IEnumerable<IListBlobItem>
其他答案涵盖的内容。