Итак, у меня есть эти два метода
private static void AddOrUpdate(Computer input)
{
if (Simple.Repository.Exists<Computer>(o => o.ObjectSid == input.ObjectSid))
{
Simple.Repository.Update(input);
}
else
{
Simple.Repository.Add(input);
}
}
private static void AddOrUpdate(User input)
{
if (Simple.Repository.Exists<User>(o => o.ObjectSid == input.ObjectSid))
{
Simple.Repository.Update(input);
}
else
{
Simple.Repository.Add(input);
}
}
, и в качестве упражнения я задаюсь вопросом, могу ли я использовать универсальный метод, а просто изменить метод на
private static void AddOrUpdate<T>(T input)
{
if (Simple.Repository.Exists<T>(o => o.ObjectSid == input.ObjectSid))
{
Simple.Repository.Update(input);
}
else
{
Simple.Repository.Add(input);
}
}
не работает - компилятор говорит, что тип T должен быть ссылочным типом.
Так возможно ли это?Или даже желательно?Есть ли лучший рефакторинг?
public class User
{
private string _samAccountName;
[DisplayName("User Name")]
public string SamAccountName
{
get { return _samAccountName ?? "No User"; }
set { _samAccountName = value; }
}
public string UserPrincipalName { get; set; }
public string DisplayName { get; set; }
public DateTime LastLogonTimeStamp { get; set; }
[SubSonicPrimaryKey] public Guid ObjectSid { get; set; }
public Guid? ComputerGuid { get; set; }
}
and
public class Computer
{
public string DistinguishedName { get; set;}
public string DnsHostname { get; set; }
public string Description { get; set; }
public string Cn { get; set; }
public DateTime LastLogonTimeStamp { get; set; }
public String OperatingSystem { get; set; }
public string OperatingSystemServicePack { get; set; }
[SubSonicPrimaryKey] public Guid ObjectSid { get; set;}
public Guid? UserGuid { get; set; }
}