我从未使用过Swift,但看到你的示例代码后,我想到的最接近的是匿名类型。它们允许您在声明变量并实例化其对象/值时构造一个新对象,而无需显式声明类/结构。例如:
var student = new
{
Name = "John",
LastName = "Doe",
Age = 37,
Hobbies = new [] { "Drinking", "Fishing", "Hiking" }
};
然后,你可以像这样访问字段:
student.LastName
、
student.Age
等。匿名类型中的属性类型由编译器推断(但如果您想强制某些属性具有特定类型,则可以使用强制转换)。
你的示例可以模拟成这样:
var answersArray = new[] {
new { Title = "First answer", IsCorrect = false },
new { Title = "Second answer", IsCorrect = true },
new { Title = "Third answer", IsCorrect = false },
new { Title = "Fourth answer", IsCorrect = false },
};
var questionData = new { Question = "To be or not to be?", Answers = answersArray };
数据将以某种方式访问:
Console.WriteLine(questionData.Question)
foreach (var answer in answersArray)
Console.WriteLine(answer.Title)
问题在于匿名类型创建的对象是只读的,因此在实例化对象后,无法更改匿名类型对象属性接收到的值。
using
关键字可用于已经定义类的情况下,你想要为该类指定别名的情况,例如:
// The "HttpClient" class will now have an alias of "MyClient"
using MyClient = System.Net.Http.HttpClient;
这种方法显然需要先定义您要别名的类,因此我不知道它是否符合您的需求。
经过这些考虑,我认为最佳实践(也是我的建议)实际上是在代码中声明类和/或结构来表示您正在使用的数据,而不是试图模仿Swift的
typealias
。
typealias
一样有多个类型赋值给一个别名的情况,例如问题中的第一个typealias
包含一个字符串和一个布尔值,它们按顺序排列;因此typealias
Answer
实际上是两种类型。再次为我的表述不清道歉;点击这里查看专业定义 - HudsonGraeme