您好,感谢您的帮助。
我开始在NHibernate世界,我正在尝试NHibernate CookBook 食谱,我试图为我的实体设置一个基本实体类,这是它的C#代码。我想知道VB.NET版本是什么,所以我可以在我的示例项目中实现它。
这是C#代码:
public abstract class Entity<TId>
{
public virtual TId Id { get; protected set; }
public override bool Equals(object obj)
{
return Equals(obj as Entity<TId>);
}
private static bool IsTransient(Entity<TId> obj)
{
return obj != null &&
Equals(obj.Id, default(TId));
}
private Type GetUnproxiedType()
{
return GetType();
}
public virtual bool Equals(Entity<TId> other)
{
if (other == null)
return false;
if (ReferenceEquals(this, other))
return true;
if (!IsTransient(this) && !IsTransient(other) && Equals(Id, other.Id))
{
var otherType = other.GetUnproxiedType();
var thisType = GetUnproxiedType();
return thisType.IsAssignableFrom(otherType) ||
otherType.IsAssignableFrom(thisType);
}
return false;
}
public override int GetHashCode()
{
if (Equals(Id, default(TId)))
return base.GetHashCode();
return Id.GetHashCode();
}
}
我尝试使用在线转换器但是没有任何参考代替默认(TId),这对我来说似乎不对,这就是我请求帮助的原因:
Private Shared Function IsTransient(obj As Entity(Of TId)) As Boolean
Return obj IsNot Nothing AndAlso Equals(obj.Id, Nothing)
End Function
我很感激你就这个问题给我的见解。
答案 0 :(得分:2)
有问题的代码是正确的:VB中的Nothing
代表两件事,具体取决于上下文:null
如果分配给参考类型或与参考类型进行比较,default(T)
如果用于值类型T
的上下文。
答案 1 :(得分:1)
请将此作为样本,并以此为基础进行项目。如果可能,请及时告知我您的状态。一般来说它是多么容易或困难。获取网络资源等。
答案 2 :(得分:1)
C#和VB有一些共同之处。他们使用.NET Framework。因此,它(通常)很容易在它们之间进行转换,没有任何错误。
您应该在这里查看转换器,看看它是否生成您的代码而没有令人讨厌的错误。通常情况下,它对我来说就像一个魅力! http://www.developerfusion.com/tools/convert/csharp-to-vb/