本文整理汇总了C#中IReadOnlyList.GetDataTypes方法的典型用法代码示例。如果您正苦于以下问题:C# IReadOnlyList.GetDataTypes方法的具体用法?C# IReadOnlyList.GetDataTypes怎么用?C# IReadOnlyList.GetDataTypes使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类IReadOnlyList
的用法示例。
在下文中一共展示了IReadOnlyList.GetDataTypes方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: InitInstance
private static void InitInstance(IReadOnlyList<GenericSymbol> fg, IReadOnlyList<ArgumentSymbol> fa,
IReadOnlyList<TypeSymbol> ag, IReadOnlyList<TypeSymbol> aa, List<TypeSymbol> ig, List<TypeSymbol> ia)
{
if (!ArgumentSymbol.HasVariadic(fg))
{
ig.AddRange(fg);
if (!ArgumentSymbol.HasVariadic(fa))
{
ia.AddRange(fa.GetDataTypes());
}
else
{
ia.AddRange(fa.GetDataTypes());
var t = GetVariadicType(ia);
ia.RemoveAt(ia.Count - 1);
ia.AddRange(MakeArgument(aa.Count - fa.Count + 1, t));
}
}
else
{
ig.AddRange(fg);
ig.RemoveAt(ig.Count - 1);
var c = (fg.Count > ag.Count) ? (aa.Count - fa.Count + 1) : (ag.Count - fg.Count + 1);
var mg = OverLoadTypeMatch.MakeGeneric(c);
ig.AddRange(mg);
if (!ArgumentSymbol.HasVariadic(fa))
{
ia.AddRange(fa.GetDataTypes());
}
else
{
ia.AddRange(fa.GetDataTypes());
ia.RemoveAt(ia.Count - 1);
ia.AddRange(mg);
}
}
}
示例2: MakeMatch
//todo さらに詳しい順位付けをする。
//todo デフォルト引数に対応する。
//todo 型制約に対応する。
internal static OverLoadCallMatch MakeMatch(Root root, RoutineSymbol call, IReadOnlyList<GenericSymbol> fg, IReadOnlyList<ArgumentSymbol> fa,
IReadOnlyList<GenericsInstance> inst, IReadOnlyList<TypeSymbol> ag, IReadOnlyList<TypeSymbol> aa)
{
var ig = new List<TypeSymbol>();
var ia = new List<TypeSymbol>();
var convs = new List<RoutineSymbol>();
var result = new OverLoadCallMatch()
{
Call = call,
FormalGenerics = fg,
FormalArguments = fa,
ScopeInstance = inst,
ActualGenerics = ag,
ActualArguments = aa,
InstanceGenerics = ig,
InstanceArguments = ia,
Converters = convs,
};
if (TypeSymbol.HasAnyErrorType(fg) || TypeSymbol.HasAnyErrorType(fa.GetDataTypes()))
{
result.Result = CallMatchResult.Unknown;
return result;
}
if (!OverLoadTypeMatch.ContainGenericCount(fg, ag))
{
result.Result = CallMatchResult.UnmatchGenericCount;
return result;
}
if (!ContainArgumentCount(fa, aa) || !ContainTupleCount(fg, fa, ag, aa))
{
result.Result = CallMatchResult.UnmatchArgumentCount;
return result;
}
InitInstance(fg, fa, ag, aa, ig, ia);
var tgi = InferInstance(root, inst, ag, aa, ig, ia);
if (TypeSymbol.HasAnyErrorType(tgi))
{
result.Result = CallMatchResult.UnmatchGenericType;
return result;
}
for (int i = 0; i < ia.Count; i++)
{
var c = root.ConvManager.Find(aa[i], ia[i]);
convs.Add(c);
}
result.Result = CheckConverterResult(convs);
if (HasMatch(result.Result))
{
result.Call = GenericsInstance.MakeRoutineTemplateInstance(root, tgi, call);
}
return result;
}