如何在StringTemplate中的对象上调用c#扩展方法?

本文关键字:调用 扩展 方法 对象 StringTemplate | 更新日期: 2023-09-27 18:16:54

我想做一个if…然后在StringTemplate中基于集合中的项数。我想这样做:

$if(length(myCollection)> 1)$

但是,这被认为是逻辑操作,因此是被禁止的(StringTemplate不能识别>操作符)。

但是,StringTemplate会反映出一个扩展方法吗?

我的扩展方法是这样的:

public static bool IsMoreThanOne(this ICollection list)
{
    return list.Count > 1;
}

如果我的模板是这样的:

$if(myCollection.MoreThanOne)$

如果该方法是"一阶"方法(意思是在"myCollection"对象上),则会找到该方法。但它不是——它是一个扩展方法,所以它似乎不起作用

如何在StringTemplate中的对象上调用c#扩展方法?

对于这个特定的逻辑,您可以使用以下表达式,它基本上表示"如果我们跳过第一个项,剩余的集合是否包含任何项?":

$if(rest(myCollection))$

一般来说,你可以创建一个IModelAdaptor的实现,它支持访问你的对象的特定属性。如果你的实现扩展了ObjectModelAdaptorMapModelAdaptor,你可以回到return base.GetProperty(...)处理任何你不自己处理的属性。