Nhãn mặc định của câu lệnh switch của C# xử lý một enum vô hiệu như thế nào?Nhãn mặc định của câu lệnh switch của C# sẽ xử lý một enum vô hiệu như thế nào?
Nhãn mặc định có thu được các giá trị rỗng và bất kỳ trường hợp chưa được xử lý nào không?
Nhãn mặc định của câu lệnh switch của C# xử lý một enum vô hiệu như thế nào?Nhãn mặc định của câu lệnh switch của C# sẽ xử lý một enum vô hiệu như thế nào?
Nhãn mặc định có thu được các giá trị rỗng và bất kỳ trường hợp chưa được xử lý nào không?
Nếu nó rỗng, nó sẽ nhấn nhãn mặc định.
public enum YesNo
{
Yes,
No,
}
public class Program
{
public static void Main(string[] args)
{
YesNo? value = null;
switch (value)
{
case YesNo.Yes:
Console.WriteLine("Yes");
break;
case YesNo.No:
Console.WriteLine("No");
break;
default:
Console.WriteLine("default");
break;
}
}
}
Chương trình sẽ in default
.
Trừ khi xử lý null.
public class Program
{
public static void Main(string[] args)
{
YesNo? value = null;
switch (value)
{
case YesNo.Yes:
Console.WriteLine("Yes");
break;
case YesNo.No:
Console.WriteLine("No");
break;
case null:
Console.WriteLine("NULL");
break;
default:
Console.WriteLine("default");
break;
}
}
}
in NULL
.
Nếu bạn có một giá trị enum unhandled đã được thêm vào sau đó:
public enum YesNo
{
Yes,
No,
FileNotFound,
}
public class Program
{
public static void Main(string[] args)
{
YesNo? value = YesNo.FileNotFound;
switch (value)
{
case YesNo.Yes:
Console.WriteLine("Yes");
break;
case YesNo.No:
Console.WriteLine("No");
break;
default:
Console.WriteLine("default");
break;
}
}
}
Nó vẫn in default
.
Đây là một trong những lý do tại sao tôi thích C# hơn Java. –
Bạn có thể sử dụng toán tử null-coalescing ??
để định tuyến null
giá trị chuyển sang một nhãn trường hợp cụ thể khác hơn default
:
public static IEnumerable<String> AsStrings(this IEnumerable<Char[]> src)
{
Char[] rgch;
var e = src.GetEnumerator();
while (e.MoveNext())
{
switch ((rgch = e.Current)?.Length ?? -1)
{
case -1: // <-- value when e.Current is 'null'
yield return null;
break;
case 0:
yield return String.Empty;
break;
case 1:
yield return String.Intern(new String(rgch[0], 1));
break;
default: // 2...n
yield return new String(rgch);
break;
}
}
}
Hãy thử nó ở đây: http://ideone.com/ – CloudyMarble
C# Language Specification, 8.7.2 "Câu lệnh chuyển đổi". http://msdn.microsoft.com/en-us/library/ms228593.aspx – Dennis