NHibernate实体代码从#C转换为VB.Net

时间:2011-01-12 16:44:41

标签: c# vb.net nhibernate

您好,感谢您的帮助。

我开始在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

我很感激你就这个问题给我的见解。

3 个答案:

答案 0 :(得分:2)

有问题的代码是正确的:VB中的Nothing代表两件事,具体取决于上下文:null如果分配给参考类型或与参考类型进行比较,default(T)如果用于值类型T的上下文。

答案 1 :(得分:1)

请将此作为样本,并以此为基础进行项目。如果可能,请及时告知我您的状态。一般来说它是多么容易或困难。获取网络资源等。

http://www.codeproject.com/KB/vb/nhibervbdotnet.aspx

http://www.codeproject.com/KB/aspnet/NHibernate_VB_Net.aspx

答案 2 :(得分:1)

C#和VB有一些共同之处。他们使用.NET Framework。因此,它(通常)很容易在它们之间进行转换,没有任何错误。

您应该在这里查看转换器,看看它是否生成您的代码而没有令人讨厌的错误。通常情况下,它对我来说就像一个魅力! http://www.developerfusion.com/tools/convert/csharp-to-vb/