Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/291.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# 对类型为';任务<;列表<;SharepointDTO.RootObject>&燃气轮机;_C#_Api - Fatal编程技术网

C# 对类型为';任务<;列表<;SharepointDTO.RootObject>&燃气轮机;

C# 对类型为';任务<;列表<;SharepointDTO.RootObject>&燃气轮机;,c#,api,C#,Api,我试图在C#应用程序中多次调用Sharepoint API,并将返回的结果存储到列表中,如下所示 private async Task<List<sDTO.RootObject>> getfromSharepoint() { List<SharepointDTO.RootObject> returnObj = new List<SharepointDTO.RootObject>(); var result =

我试图在C#应用程序中多次调用Sharepoint API,并将返回的结果存储到
列表中,如下所示

  private async Task<List<sDTO.RootObject>> getfromSharepoint()
    {
       List<SharepointDTO.RootObject> returnObj = new List<SharepointDTO.RootObject>();
       var result = new UpdateCoreStrains.SharepointDTO.RootObject();
        ......
        // Calling GET Sharepoint Site
        try
        {
            for (int i = 0; i < 10000; i = i + 5000)
            {
                SP_StrainCodes = "GetByTitle('S%20Codes')/items?$skiptoken=Paged=TRUE%26p_ID=" + i + "&$top=1";
                core_URL = BaseURL_SP + SP_StrainCodes;

                var response = client_sharePoint.GetAsync(core_URL).Result;
                var responsedata = await response.Content.ReadAsStringAsync();
                 result = JsonConvert.DeserializeObject<sDTO.RootObject>(responsedata);
                    if (result.d.Next == null)
                        continue;

                }
                returnObj.Add(result);
            }
            return returnObj;
        }
私有异步任务getfromSharepoint() { List returnObj=新列表(); var result=new updateconstraints.SharepointDTO.RootObject(); ...... //调用获取Sharepoint站点 尝试 { 对于(int i=0;i<10000;i=i+5000) { SP_straintCodes=“GetByTitle('S%20Codes')/items?$skiptoken=Paged=TRUE%26p_ID=“+i+”&$top=1”; core_URL=BaseURL_SP+SP_代码; var response=client\u sharePoint.GetAsync(core\u URL).Result; var responsedata=await response.Content.ReadAsStringAsync(); 结果=JsonConvert.DeserializeObject(responsedata); if(result.d.Next==null) 继续; } 返回对象添加(结果); } 返回OBJ; }
现在我在另一个函数中调用getfromSharepoint(),我想迭代列表以验证数据

    public List<numberList>  getListFromSharepoint()
    {
        List<umberList> nums = new List<numberList>();
        try
        {

            Task<List<sDTO.RootObject>> sharepointList = getfromSharepoint();

            foreach(sDTO retSharepointobj in sharepointList)
            {

                if (retSharepointobj == null ||
                    retSharepointobj.Id == 0 ||
                    retSharepointobj.Result.
                    retSharepointobj.Result == null ||
                    retSharepointobj.Result.d == null ||
                    retSharepointobj.Result.d.results == null ||
                    retSharepointobj.Result.d.results.Count == 0
                    )
                {
                    return nums;  // count = 0, return an empty list
                }
公共列表getListFromSharepoint()
{
List nums=新列表();
尝试
{
任务sharepointList=getfromSharepoint();
foreach(sDTO retSharepointobj在sharepointList中)
{
if(retSharepointobj==null||
retSharepointobj.Id==0||
retSharepointobj.Result。
retSharepointobj.Result==null||
retSharepointobj.Result.d==null||
retSharepointobj.Result.d.results==null||
retSharepointobj.Result.d.results.Count==0
)
{
return nums;//count=0,返回空列表
}
但是我得到了一个错误,就像

foreach语句无法对“Task”类型的变量进行操作,因为“Task”不包含“GetEnumerator”的公共定义。
我如何迭代>

Ths:
任务共享点列表=getfromSharepoint();
正在调用一个
async
方法,该方法不会立即返回。您的代码应该如下所示:

List<sDTO.RootObject> sharepointList = getfromSharepoint().Result;
List sharepointList=getfromSharepoint().Result;

这里您试图迭代
sharepointList
的项目,该项目属于
Task
类型,不包含“GetEnumerator”的公共定义(如错误消息所述)。但您可以迭代任务的结果,因为它是
RootObject
的集合。如果您希望通过
sharepointList
List
进行循环,则应使用:

foreach (sDTO.RootObject retSharepointobj in sharepointList.Result)
{
   // here each retSharepointobj  of type RootObject 
   // code here
}

尝试将您的
getListFromSharepoint
方法设置为
async

 public async Task<List<numberList>> getListFromSharepoint()
    {
        List<umberList> nums = new List<numberList>();
        try
        {
            //Here we use an await to get result from getfromSharepoint() method call.
            List<sDTO.RootObject> sharepointList = await getfromSharepoint();

            foreach (sDTO retSharepointobj in sharepointList)
            {
                //your rest of code is same here
            }

您只需使用
getfromSharepoint
Result

List<sDTO.RootObject> sharepointList = await getfromSharepoint().Result;
List sharepointList=Wait getfromSharepoint()。结果;

您有异步代码,您应该正确地等待它。@DavidG-Yeah正在做
var-responsedata=wait-response.Content.ReadAsStringAsync();
试试这个
任务共享点列表=wait-getfromSharepoint();
并将
getListFromSharepoint
方法设置为
async
如何从其他函数调用此方法
getListFromSharepoint()
;List sharepointList=getfromSharepoint().Result;这不应该是一个选项,因为它会破坏异步函数的正常流程。@Eldho:实际上,我不能使用
await
,因为调用方法本身不是
async
。在
任务上调用
.Results
是一种容易陷入死锁的方法,应该避免,使用
await
。看一看此处:更改后的
sharepointList
不应为
Task
类型,它现在将是一个普通的
列表
。此外,这里根本没有理由使用try/catch。try/catch和throw ex仅用于完成小括号。感谢您的建议,我将更新我的answer@ershoaib我得到的错误类似于
无法隐式y将类型“System.Collections.Generic.List”转换为“System.Threading.Tasks.Task”
如果我使用的是
Task returnSharepointList=Wait getfromSharepoint()
调用from
getListFromSharepoint
的函数时出现此错误的原因
?如果仅使用
Task sharepointList=getfromSharepoint(),您会得到什么.Result;
List<sDTO.RootObject> sharepointList = await getfromSharepoint().Result;