【问题标题】:foreach statement cannot operate on variables of type 'T' because 'T' does not contain a public definition for 'GetEnumerator'?foreach 语句不能对“T”类型的变量进行操作,因为“T”不包含“GetEnumerator”的公共定义?
【发布时间】:2017-03-08 19:41:42
【问题描述】:
 public async Task<ObservableCollection<T>> All(string url)
    {
        ObservableCollection<T> Collection=new ObservableCollection<T>();
        try
        {
            var response = await httpclient.GetResponseAsync(url);

            if(!string.IsNullOrEmpty(response))
            {
                var content  = JsonConvert.DeserializeObject<T>(response);

                foreach(var item in content)
                {
                    Collection.Add(item);
                }
            }
            else
            {
                throw new Exception();
            }
        }
        catch (HttpRequestException )
        {               
        }
        catch(TaskCanceledException )
        {
        }
        catch(Exception)
        {
        }

        //throw new NotImplementedException();
        return Collection;

    }

如何将内容逐个循环到 Collection 作为我的代码。

  1. 我想编写一次代码,它在我的项目中使用了很多次

例如:ObservableCollection**""** getListAll=t.All(".....");

CS1579 foreach 语句无法对“T”类型的变量进行操作,因为“T”不包含“GetEnumerator”的公共定义

【问题讨论】:

  • 您可以发布实际引发错误的代码部分吗?即ObservableCollection getListAll=t.All("....."); 处的代码
  • 此代码无法编译。您必须在方法签名中指定泛型类型参数,而不仅仅是在返回值类型中。
  • 也许T 是在类级别定义的。 @dymanoid 但是是的。您必须指定 T 实现 IEnumerable
  • @Dillanm foreach(var item in content) 错误在这里显示
  • @M 是的,我想定义 T 是类

标签: c# json wpf uwp


【解决方案1】:

要使其编译,您只需将方法签名更改为:

public async Task<ObservableCollection<T>> All(string url) where T:IEnumerable<T> {...}

我怀疑您也没有正确序列化,但如果没有底层代码则无法确定。考虑使用包装类或查看The documentation

【讨论】:

    【解决方案2】:

    首先这个方法不会编译你必须在方法anem(All)之后添加。其次,如果您确定响应将是您必须反序列化为 IEnumerable 的 T 集合,那么您将能够在其上使用 foreach。

    public async Task<ObservableCollection<T>> All(string url)
        {
            ObservableCollection<T> Collection=new ObservableCollection<T>();
            try
            {
                var response = await httpclient.GetResponseAsync(url);
    
                if(!string.IsNullOrEmpty(response))
                {
                    var content  = JsonConvert.DeserializeObject<IEnumerable<T>>(response);
    
                    foreach(var item in content)
                    {
                        Collection.Add(item);
                    }
                }
                else
                {
                    throw new Exception();
                }
            }
            catch (HttpRequestException )
            {               
            }
            catch(TaskCanceledException )
            {
            }
            catch(Exception)
            {
            }
    
            //throw new NotImplementedException();
            return Collection;
    
        }
    

    【讨论】:

    • 我要定义T是类
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-03-27
    • 1970-01-01
    • 2012-08-19
    • 1970-01-01
    • 2018-06-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多