C# 如何使switch语句与枚举一起工作?C统一
描述 我正在编写一个脚本来淡出Unity中的UI元素,类似于选择器,在这里可以选择淡出的类型、持续时间和要淡出的图像 我发现enum是实现该结果的最佳选项,但我有一个问题,当我运行enum的code-only元素时,另一个元素不工作,无论我是否使用switchor(如果只运行第一条语句),我都不知道代码出了什么问题 请解释你的答案 请解释代码错误的原因 请给出如何改进的反馈 我使用的是Unity 5.3.5f1版和Visual Studio Community 2015 目标 使用开关或if使枚举正常工作 能够使用FadeOperations类中的变量 测试类中的计算 从数组中选择所需操作的类型 从Heriarchy中选择一个UI元素并使其褪色 台阶 创建新的Unity项目2D或3D 创建用户界面图像 创建空的游戏对象 创建新的C脚本,我称之为Test 将新脚本附加到空游戏对象 代码 这是我的密码C# 如何使switch语句与枚举一起工作?C统一,c#,unity3d,enums,C#,Unity3d,Enums,描述 我正在编写一个脚本来淡出Unity中的UI元素,类似于选择器,在这里可以选择淡出的类型、持续时间和要淡出的图像 我发现enum是实现该结果的最佳选项,但我有一个问题,当我运行enum的code-only元素时,另一个元素不工作,无论我是否使用switchor(如果只运行第一条语句),我都不知道代码出了什么问题 请解释你的答案 请解释代码错误的原因 请给出如何改进的反馈 我使用的是Unity 5.3.5f1版和Visual Studio Community 2015 目标 使用开关或if使枚
using UnityEngine;
using UnityEngine.UI;
public enum FadeManager
{
fadeIn,
fadeOut
};
[System.Serializable]
public class FadeOperations
{
[Tooltip("Type of fading")]
public FadeManager fadeType;
[Tooltip("Duration time of the fading")]
public float duration;
[Tooltip("Select the image to fade")]
public Image fadeImage;
}
public class Test : MonoBehaviour
{
[Tooltip("Select your type of fade")]
public FadeOperations[] fadeOperations;
//Reference to the class FadeOperations
private FadeOperations _fo = new FadeOperations();
//Loop for debug
private void Start()
{
Debug.Log(_fo.fadeType);
switch (_fo.fadeType)
{
//This statement works
case FadeManager.fadeIn:
Debug.Log("Fadein"); //Only this piece of code works
break;
//This statement doesn't work
case FadeManager.fadeOut:
Debug.Log("Fadeout");
break;
}
}
}
切换前的Log\u fo.fadeType的结果
以下是您可能想做的事情:
public class Test : MonoBehaviour
{
[Tooltip("Select your type of fade")]
public FadeOperations[] fadeOperations;
//Loop for debug X NOTE: Start method runs only one time.dont expect it to run it for multiple time
private void Start()
{
foreach(var operation in fadeOperations)
{
Debug.Log(operation.fadeType);
switch (operation.fadeType)
{
case FadeManager.fadeIn:
Debug.Log("Fadein"); // write your fading in code here
break;
case FadeManager.fadeOut:
Debug.Log("Fadeout"); // write your fading out code here
break;
}
}
}
}
以下是您可能想做的事情:
public class Test : MonoBehaviour
{
[Tooltip("Select your type of fade")]
public FadeOperations[] fadeOperations;
//Loop for debug X NOTE: Start method runs only one time.dont expect it to run it for multiple time
private void Start()
{
foreach(var operation in fadeOperations)
{
Debug.Log(operation.fadeType);
switch (operation.fadeType)
{
case FadeManager.fadeIn:
Debug.Log("Fadein"); // write your fading in code here
break;
case FadeManager.fadeOut:
Debug.Log("Fadeout"); // write your fading out code here
break;
}
}
}
}
您不需要为_fo.fadeType分配一个值,这样它就可以得到默认值,而默认值通常是枚举的第一个值。此外,你的问题很不清楚。主题似乎是家庭作业,但是你应该只发布那些你有问题的部分,而不是整个任务。你能解释更多吗?你必须为_fo.fadeType设置一个值,你不能期望你的应用程序简单地为它提供任意值。如果不这样做,对象只会得到它的第一个值,因为枚举不能为null。。。所以如何改进代码?我们不能告诉您如何设置此值,您必须了解自己。显然,您首先需要一些编程的基础知识,开关做什么,以及如何创建类的实例,特别是如何处理枚举。基本上可以归结为您使用新的FadeOperations创建FadeOperations实例。但是,您永远不会更改它的任何属性—无论是fadeType、Duration还是fadeImage。您必须明确地设置thopse,否则编译器将为它们使用默认值,例如第一个枚举值。您不为_fo.fadeType分配一个值,因此它将获得默认值,通常是枚举的第一个值。此外,你的问题很不清楚。主题似乎是家庭作业,但是你应该只发布那些你有问题的部分,而不是整个任务。你能解释更多吗?你必须为_fo.fadeType设置一个值,你不能期望你的应用程序简单地为它提供任意值。如果不这样做,对象只会得到它的第一个值,因为枚举不能为null。。。所以如何改进代码?我们不能告诉您如何设置此值,您必须了解自己。显然,您首先需要一些编程的基础知识,开关做什么,以及如何创建类的实例,特别是如何处理枚举。基本上可以归结为您使用新的FadeOperations创建FadeOperations实例。但是,您永远不会更改它的任何属性—无论是fadeType、Duration还是fadeImage。您必须明确设置thopse,否则编译器将使用默认值,例如第一个枚举值。正确-顺便说一句,只使用标题而不是工具提示-更酷:正确-顺便说一句,只使用标题而不是工具提示-更酷: