(道歉,这基本上是我的第一个C#程序,我正在翻译C ++)
我定义了一个"用户"像这样的结构:
struct user
{
string usrnm;
string pw;
}
据说here可以在C#
中创建伪typedefnamespace _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?)
那么为什么这不起作用,我怎样才能让它发挥作用?
答案 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.MyClass
和MyNamespace2.MySubnamespace2.MyClass
。 ..我每次都可以写全名,或者我可以添加两个using M1 = MyNamespace1.MySubnamespace1;using M2 = MyNamespace2.MySubnamespace2;
然后M1.MyClass
和M2.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“