如何使用泛型类型约束封装Method

时间:2016-03-10 10:09:56

标签: c# generics constraints

我有一个问题,我不知道该怎么做。其实我不确定标题是否正确。

我想封装一个具有通用参数的方法。我们的想法是在方法调用周围添加一些日志调用等。

因此这个功能

public void Load<T>(T spObject, params Expression<Func<T, object>>[] retrievals)
{
    try
    {
      ... .Load(spObject, retrievals);}...
    }
}

应该封装一个看起来像这样的函数。

public void Load<T>(T spObject, params Expression<Func<T, object>>[] retrievals) 
where T : ClientObject

必须删除Where T : ClientObject,因为它需要在另一个项目中引用其他dll

当我尝试删除我收到错误的地方

  

类型'T'不能在泛型类型或方法'Microsoft.SharePoint.Client.ClientRuntimeContext.Load(T,params ...

)中用作类型参数'T'

希望有些人知道如何处理这个问题。

谢谢:-) 格尔茨

2 个答案:

答案 0 :(得分:0)

这不是封装问题,而是间接引用问题。

如果您不想链接到此“其他”dll,但仍想使用load方法,那么您需要直接引用Microsoft.SharePoint.Client.ClientObject,因为那是{需要使用where方法的{1}}子句。

这是您需要添加到源文件中的内容:

load

然后你需要添加

using Microsoft.SharePoint.Client;

到您的项目参考。 dll应位于Microsoft.SharePoint.Client.dll Microsoft.SharePoint.Client.Runtime.dll C:\Program Files\Common Files\Microsoft Shared\SharePoint Client中,具体取决于您的sharepoint版本。

这应该足以编译和链接您的程序。

答案 1 :(得分:-1)

您是否考虑过使用动态对象类?这允许在运行时定义对象。

public void Load(dynamic spObject, params Expression<Func<dynamic, object>>[] retrievals){
  ..
}
相关问题