本文整理汇总了C#中Mono.Cecil.PropertyDefinition.IsIQueryable方法的典型用法代码示例。如果您正苦于以下问题:C# PropertyDefinition.IsIQueryable方法的具体用法?C# PropertyDefinition.IsIQueryable怎么用?C# PropertyDefinition.IsIQueryable使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Mono.Cecil.PropertyDefinition
的用法示例。
在下文中一共展示了PropertyDefinition.IsIQueryable方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: WeaveProperty
//.........这里部分代码省略.........
methodTable[typeId] = realmAccessors = Tuple.Create(getter, setter);
}
ReplaceGetter(prop, columnName, realmAccessors.Item1);
ReplaceSetter(prop, backingField, columnName, realmAccessors.Item2);
}
else if (prop.IsIList())
{
var elementType = ((GenericInstanceType)prop.PropertyType).GenericArguments.Single();
if (!elementType.Resolve().BaseType.IsSameAs(_references.RealmObject))
{
return WeaveResult.Warning($"SKIPPING {type.Name}.{columnName} because it is an IList but its generic type is not a RealmObject subclass, so will not persist.");
}
if (prop.SetMethod != null)
{
return WeaveResult.Error($"{type.Name}.{columnName} has a setter but its type is a IList which only supports getters.");
}
var concreteListConstructor = _references.System_Collections_Generic_ListOfT_Constructor.MakeHostInstanceGeneric(elementType);
// weaves list getter which also sets backing to List<T>, forcing it to accept us setting it post-init
var backingDef = backingField as FieldDefinition;
if (backingDef != null)
{
backingDef.Attributes &= ~FieldAttributes.InitOnly; // without a set; auto property has this flag we must clear
}
ReplaceListGetter(prop, backingField, columnName,
new GenericInstanceMethod(_references.RealmObject_GetListValue) { GenericArguments = { elementType } },
concreteListConstructor);
}
else if (prop.PropertyType.Resolve().BaseType.IsSameAs(_references.RealmObject))
{
// with casting in the _realmObject methods, should just work
ReplaceGetter(prop, columnName,
new GenericInstanceMethod(_references.RealmObject_GetObjectValue) { GenericArguments = { prop.PropertyType } });
ReplaceSetter(prop, backingField, columnName,
new GenericInstanceMethod(_references.RealmObject_SetObjectValue) { GenericArguments = { prop.PropertyType } });
}
else if (prop.IsIQueryable())
{
var backlinkAttribute = prop.CustomAttributes.FirstOrDefault(a => a.AttributeType.Name == "BacklinkAttribute");
if (backlinkAttribute == null)
{
return WeaveResult.Skipped();
}
if (prop.SetMethod != null)
{
return WeaveResult.Error("Backlink properties must be read-only.");
}
var elementType = ((GenericInstanceType)prop.PropertyType).GenericArguments.Single();
var inversePropertyName = (string)backlinkAttribute.ConstructorArguments[0].Value;
var inverseProperty = elementType.Resolve().Properties.SingleOrDefault(p => p.Name == inversePropertyName);
if (inverseProperty == null || (!inverseProperty.PropertyType.IsSameAs(type) && !inverseProperty.IsIList(type)))
{
return WeaveResult.Error($"The property '{elementType.Name}.{inversePropertyName}' does not constitute a link to '{type.Name}' as described by '{type.Name}.{prop.Name}'.");
}
var backingDef = backingField as FieldDefinition;
if (backingDef != null)
{
backingDef.Attributes &= ~FieldAttributes.InitOnly; // without a set; auto property has this flag we must clear
}
ReplaceBacklinksGetter(prop, backingField, columnName, elementType);
}
else if (prop.SetMethod == null)
{
return WeaveResult.Skipped();
}
else if (prop.PropertyType.FullName == "System.DateTime")
{
return WeaveResult.Error($"Class '{type.Name}' field '{prop.Name}' is a DateTime which is not supported - use DateTimeOffset instead.");
}
else if (prop.PropertyType.FullName == "System.Nullable`1<System.DateTime>")
{
return WeaveResult.Error($"Class '{type.Name}' field '{prop.Name}' is a DateTime? which is not supported - use DateTimeOffset? instead.");
}
else
{
return WeaveResult.Error($"Class '{type.Name}' field '{columnName}' is a '{prop.PropertyType}' which is not yet supported.");
}
var preserveAttribute = new CustomAttribute(_references.PreserveAttribute_Constructor);
prop.CustomAttributes.Add(preserveAttribute);
var wovenPropertyAttribute = new CustomAttribute(_references.WovenPropertyAttribute_Constructor);
prop.CustomAttributes.Add(wovenPropertyAttribute);
Debug.WriteLine(string.Empty);
var primaryKeyMsg = isPrimaryKey ? "[PrimaryKey]" : string.Empty;
var indexedMsg = isIndexed ? "[Indexed]" : string.Empty;
LogDebug($"Woven {type.Name}.{prop.Name} as a {prop.PropertyType.FullName} {primaryKeyMsg} {indexedMsg}.");
return WeaveResult.Success(prop, backingField, isPrimaryKey);
}