如何将常用扩展方法应用于第三方SDK中的多个不相关类型?

bal*_*dre 9 c# extension-methods

我开始爱上扩展方法,但我只是不知道如何为确定的对象类型创建EM.

我有例如:

public static void AddPhoneNumberToContact(this Contact contact, PhoneType type, String number)
{
    lock (contact)
    {
        PhoneRow pr = PhoneRow.CreateNew();
        pr.SetDefaults();
        pr.PtypeIdx = type;
        pr.PhoneNumber = number;
        contact.Phones.Add(pr);
        pr = null;
    }
}
Run Code Online (Sandbox Code Playgroud)

我的问题是我想在Person对象中也有这个方法,这就是我命名的原因

AddPhoneNumberToContact
AddPhoneNumberToPerson
Run Code Online (Sandbox Code Playgroud)

有没有办法让AddPhoneNumber和处理提供的对象?

或解决方案是

public static void AddPhoneNumber(this object contact, ...
{
   ...

   if(typeof(Contact) == contact)
      ((Contact)contact).Phones.Add(pr);
   else if(typeof(Person) == contact)
      ((Person)contact).Phones.Add(pr);
}
Run Code Online (Sandbox Code Playgroud)

谢谢.

Fre*_*ool 12

如何写两个扩展方法:

public static void AddPhoneNumber(this Contact contact, PhoneType type);
Run Code Online (Sandbox Code Playgroud)

public static void AddPhoneNumber(this Person person, PhoneType type);
Run Code Online (Sandbox Code Playgroud)

看起来更干净.

如果两者之间存在一些共同的代码,请将其提取到单独的方法中.


Ant*_*lev 7

制作ContactPerson实现通用接口 - 比如说IContactWithPhoneNumbers- 然后为此接口编写扩展方法.

public interface IContactWithPhoneNumbers {}
public class Contact : IContactWithPhoneNumbers {}
public class Person : IContactWithPhoneNumbers {}
public static void AddPhoneNumber(this IContactWithPhoneNumbers obj) {}
Run Code Online (Sandbox Code Playgroud)