C#结构字典的自定义别名

时间:2015-03-27 10:46:52

标签: c# dictionary struct typedef

(道歉,这基本上是我的第一个C#程序,我正在翻译C ++)

我定义了一个"用户"像这样的结构:

struct user
{
  string usrnm;
  string pw;
}

据说here可以在C#

中创建伪typedef
namespace _1._0
{
  class Program
  {
    struct user
    {
      string usrnm;
      string pw;
    }
    using (userArr = Dictionary<int, user>);
  }
}

但这不起作用;它让我错误地说:

Invalid token 'using' in class, struct or interface member declaration

The type or namespace name 'userArr' could not be found (are you missing a using directive or assembly reference?)

那么为什么这不起作用,我怎样才能让它发挥作用?

3 个答案:

答案 0 :(得分:1)

完整的例子应该是:

using userArr = System.Collections.Generic.Dictionary<int, _1._0.Program.user>;

namespace _1._0
{ 
    // You could place it here, nearly equivalent:
    // using userArr = System.Collections.Generic.Dictionary<int, Program.user>;

    public class Program
    {
        public struct user
        {
            string usrnm;
            string pw;
        }
    }
}

然后在该文件中你可以:

userArr myDictionary = new userArr();

您使用using using System;,而不是using (something) {}。那个是using :)的另一种类型,因此您可以将其置于namespace声明之外或直接放在namespace声明中。不在class / struct /方法正文中。请注意,正如Jeppe所写,您必须使用Dictionary<>的完整命名空间。

请注意,此using将&#34;工作&#34;只在你用过的文件里面#34;它。显然,您可以将其重新应用于其他源文件。

但请注意我同意CodeCaster 。我使用using ... =的唯一一次是当我在多个名称空间中具有相同名称的类时,我需要能够区分它们(例如,我有MyNamespace1.MySubnamespace1.MyClassMyNamespace2.MySubnamespace2.MyClass。 ..我每次都可以写全名,或者我可以添加两个using M1 = MyNamespace1.MySubnamespace1;using M2 = MyNamespace2.MySubnamespace2;然后M1.MyClassM2.MyClass

答案 1 :(得分:1)

将C ++方法留在C ++中。你不需要这些。

只需使用具有属性的类,并使用正确的语法来实例化字典。

namespace _1._0
{
    public class User
    {
      public string Username { get; set; }
      public string Password { get; set; }      
    }

  class Program
  {
    static void Main(string[] args)
    {
        var userDictionary = new Dictionary<int, User>();
    }
  }
}

我不知道为什么要使用别名,但如果要防止多次输入长类型名称,请查看var使用的以上。

答案 2 :(得分:0)

我明白了。来自C ++背景,需要事先声明一切,我假设我必须对C#做同样的事情,但我没有。

using声明之前放置struct user语句可以正常工作。

(旁注:我从代码“)

中删除了所有这些”typedef“