小编And*_*ewE的帖子

为什么if语句有效但不是switch语句

我正在尝试switch使用字符串的char索引和使用包装器的Enum 创建语句,以从描述中获取所选枚举的值.它几乎允许您将字符串存储到枚举值.

这是我的if发言:

if (msgComingFromFoo[1] == Convert.ToChar(Message.Code.FOO_TRIGGER_SIGNAL.EnumDescriptionToString()))
{
    //foo
}
Run Code Online (Sandbox Code Playgroud)

这是我的switch发言:

switch (msgComingFromFoo[1])
{
    case Convert.ToChar(Message.Code.FOO_TRIGGER_SIGNAL.EnumDescriptionToString()):
        break;
}
Run Code Online (Sandbox Code Playgroud)

为什么接受if声明而不是switch?我尝试将它转换为char,因为我从字符串中选择索引,但不幸的是它没有用.

更新:

这是Message.CodeEnum

public class Message
{
    public enum Code
    {
        [Description("A")]
        FOO_TRIGGER_SIGNAL
    }
}
Run Code Online (Sandbox Code Playgroud)

正如你所看到的,我需要分配给枚举不枚举值是0.使用说明Message.Code.FOO_TRIGGER_SIGNAL.EnumDescriptionToString()自提包装回报A0


错误:

期望一个恒定的价值

c# if-statement switch-statement

39
推荐指数
4
解决办法
4816
查看次数

HttpRequest消息 POST

我正在尝试通过HttpResponseMessage发送json “样式”字符串。 我创建了以下方法,希望能够成功发送响应消息。

class Foo
{
    /// <summary>
    /// Vendors
    /// </summary>
    public enum Vendor
    {
        [Description("https://someSite.com")]
        FOO = 0x001
    }

    /// <summary>
    /// Send a POST response
    /// </summary>
    /// <param name="vendor"></param>
    /// <param name="data"></param>
    public static async void SendResponseAsync(Vendor vendor, string data)
    {
        Task task = Task.Run(async () =>
        {
            using (var httpClient = new HttpClient())
            using (var httpRequestMessage = new HttpRequestMessage(HttpMethod.Post, vendor.EnumDescriptionToString()))
            {
                var json = Newtonsoft.Json.JsonConvert.DeserializeObject(data);
                httpRequestMessage.Content = new StringContent(json.ToString(), Encoding.UTF8, "application/json");
                var result …
Run Code Online (Sandbox Code Playgroud)

c# post httprequest

10
推荐指数
1
解决办法
2万
查看次数

将事件查看器日志文件导出为 *.evtx 文件

我正在尝试从事件查看器导出信息。

我正在尝试使用EventLogSession来执行此操作,以便我可以将其采用某种.evtx格式,而不仅仅是文本文件。

public static void ExportEventViewerLog(int YearsAgo = 0, int MonthsAgo = 0, int DaysAgo = 0)
{
        int Year = 0;
        int Month = 0;
        int Day = 0;

        if (YearsAgo != 0)
        {
            Year = YearsAgo;
        }
        else if (MonthsAgo != 0)
        {
            Month = MonthsAgo;
        }
        else if (DaysAgo != 0)
        {
            Day = DaysAgo;
        }

        DateTime previousDate = DateTime.Now.AddYears(-Year).AddMonths(-Month).AddDays(-Day);
        DateTime now = DateTime.Now.Date;

        Console.WriteLine(previousDate.ToString("yyyy-MM-dd"));
        //2018-06-12
        Console.WriteLine(now.ToString("hh:mm:ss"));
        //12:00:00

        string path = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Desktop), "test.evtx"); …
Run Code Online (Sandbox Code Playgroud)

c# event-viewer

5
推荐指数
1
解决办法
1511
查看次数

在临时文件夹中创建文件夹

我正在尝试在临时文件夹中创建一个没有随机名称的文件夹。

这是我尝试在临时文件夹中创建文件夹的方式。

if not DirExists(ExpandConstant('{%tmp}\Utilities\SDK')) then
    CreateDir(ExpandConstant('{%tmp}\Utilities\SDK'));
    Log('Temp\Utilities\SDK Folder Has Been Created.');
Run Code Online (Sandbox Code Playgroud)

我查看了这个线程,但%不幸的是,即使使用了,它仍然没有创建文件夹。

该脚本按预期编译并运行,但是该文件夹不会创建,即使它说它在日志文件中,

我知道日志文件会说,因为它也被告知,但是,如果无法创建文件夹,会不会崩溃?或者如果存在 if 语句则返回 false?

inno-setup pascalscript

4
推荐指数
1
解决办法
1062
查看次数

预处理器:获取操作系统.Net Core

我正在编写一个我希望在 Windows 和 Linux 上使用的类。

此类中的方法之一是访问Windows 注册表。

我希望实现的是在使用 Linux 计算机时以某种方式禁用此特定方法。

首先,我做了一些研究,看看.Net Core是否有一些东西可以让我检查正在使用哪个操作系统,我发现了这个并且确实可以工作。

当我在访问方法时将其实现到代码中时,我希望禁用访问 Windows 注册表的方法,但是我最接近的方法是使用 switch 语句,如下所示

switch (OS)
{
    case OSX:
    return;

    case LINUX:
    return
}
Run Code Online (Sandbox Code Playgroud)

如果return操作系统不受支持,这可行,但是我随后认为禁用它一起访问会比为不支持该特定方法的操作系统抛出错误要好得多,

然后我继续查看预处理器指令认为,如果我能够检测并禁用取决于框架等的部分代码,也许我可以使用类似的东西来根据操作系统禁用部分代码,这样即使在尝试访问时也永远不会调用它们我从那里继续的方法

是看看我是否可以使用禁用部分代码preprocessor directives
我找到了这个

我知道它是针对C++的,但它似乎是我能找到的最接近我想要实现的目标的在.Net Core

一个完美的世界中,它看起来像这样

    /// <summary>
    /// Get the file mime type
    /// </summary>
    /// <param name="filePathLocation">file path location</param>
    /// <returns></returns>
    `#if WINDOWS`
    public static string GetMimeType(this string filePathLocation)
    {
        if (filePathLocation.IsValidFilePath())
        { …
Run Code Online (Sandbox Code Playgroud)

c# preprocessor-directive .net-core

4
推荐指数
1
解决办法
3729
查看次数