لماذا لا تقول C # أن IterativeTask على CCR هو غير عام؟
سؤال
وأنا باستخدام التزامن والتنسيق وقت التشغيل و أكتب رمز مشابهة لما هو موضح في وثائق. فشل السطر التالي لتجميع:
yield return new IterativeTask<string,Object,Object,long[]>("Hi",a,b,ls, itfunc);
والمترجم يعطي رسالة الخطأ هذه:
The non-generic type 'Microsoft.Ccr.Core.IterativeTask' cannot be used with type arguments
ما هو mistifying لاستخدامات الوثائق التي الأسلوب مع الحجج نوع وانها بوضوح عامة.
و(انا ذاهب للنشر الإجابة الخاصة بي هنا، أن في <لأ href = "https://meta.stackexchange.com/questions/12513/stackoverflow-should-i-answer-my-own-question-or -Not "> شجع كما أفهمها)
المحلول
واتضح أن هناك حد اقصى لعدد من المعلمات عامة واحدة يمكنك استخدامها مع IterativeTask: يمكن أن يستغرق ثلاثة لكن ليس أكثر
وهكذا، هذا الرمز برمجيا (مرة واحدة قمت بتغيير itfunc لاستخدام واحد أقل حجة):
yield return new IterativeTask<string,Object,long[]>("Hi",a,ls, itfunc);
إذا كنت حقا في حاجة إلى كل المعلومات في الحجج، يمكنك إنشاء نوع تحميلهم:
struct Z {
string msg;
Object one;
Object two;
long[] ls;
}
Z z = new Z { msg="Hi", one=a, two=b, ls= longs };
yield return new IterativeTask<Z>(z, itfunc);
لا تنتمي إلى StackOverflow