小编Mik*_*son的帖子

将DataTable转换为CSV的最有效方法

我正在使用DataTable,我需要将它们转换为CSV文件格式.我正在使用的大多数表都有超过50,000条记录,所以我试图最小化转换它们所需的时间.

这是我目前的方法:

    public static string table_to_csv(DataTable table)
    {
        string file = "";

        foreach (DataColumn col in table.Columns)
            file = string.Concat(file, col.ColumnName, ",");

        file = file.Remove(file.LastIndexOf(','), 1);
        file = string.Concat(file, "\r\n");

        foreach (DataRow row in table.Rows)
        {
            foreach (object item in row.ItemArray)
                file = string.Concat(file, item.ToString(), ",");

            file = file.Remove(file.LastIndexOf(','), 1);
            file = string.Concat(file, "\r\n");
        }

        return file;
    }
Run Code Online (Sandbox Code Playgroud)

有什么方法可以提高这种方法的效率吗?我欢迎您提出任何修改和想法!

c# csv datatable performance

14
推荐指数
2
解决办法
4万
查看次数

Inno Setup编译器"无法找到指定的路径"错误与长路径

我正在使用.iss脚本在Inno Setup Compiler中构建一个exe文件.我需要将一些node_modules打包到这个应用程序中,所以我有一行看起来像这样:[Files]

Source: "{#SourcePath}Encore.Warehouse.UI\bin\Warehouse_Release\warehouse\*"; \
    DestDir: "{app}\warehouse"; Flags: ignoreversion recursesubdirs createallsubdirs
Run Code Online (Sandbox Code Playgroud)

编译时,我收到此错误:

该系统找不到指定的路径.

这是编译器输出:

编译器输出

所以,它似乎运行正常,直到它中止.我最初的想法是,browser.js它不存在,但经过双重检查,情况并非如此.此外,我在源路径中使用通配符,因此编译器知道该文件存在,但似乎在压缩它时遇到问题.

另一个可能导致问题的是文件路径长度.由于嵌套依赖性,节点模块通常最终会出现荒谬的文件路径长度.在这种情况下,路径长度为260.假设这是造成问题的原因,有什么方法可以绕过它吗?

inno-setup max-path filepath node-modules

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

部署到Visual Studio中找不到的Android设备

我正在尝试将Apache Cordova应用程序部署到插入机器的Android设备上.但是,在尝试部署时,我收到以下错误:

无法部署到Android设备,未找到连接的设备.如果您最近连接了设备,则可能需要等待几秒钟才能识别.

据我所知,我已启用了部署到设备所需的所有开发人员设置.我已经尝试拔掉并重新插入,等待几秒钟,但无济于事.

我已经尝试过更改连接模式(HTC同步,磁盘驱动器等),但这并没有什么不同.

我正在尝试部署的Android设备已经很老了(v3.35.61.3),所以我甚至尝试部署到运行最新版本的android的不同Android设备,但同样的问题也出现了.

这让我相信Visual Studio没有拿起任何连接的Android设备是一个问题.也许我错过了一个安装包?

android cordova visual-studio-2015

9
推荐指数
2
解决办法
9092
查看次数

从C#应用程序启动Node.js服务器

我需要从C#应用程序启动Node.js服务器,这就像server.js在Node.js控制台中运行脚本一样简单.但是,我并不完全确定如何实现这一目标.

这是我到目前为止所研究的内容:

在Node.js安装中,有一个名为的文件C:\Program Files (x86)\nodejs\nodevars.bat,这是Node.js的命令提示符窗口.要启动服务器,我可能会使用以下步骤:

  1. 执行nodevars.bat文件.
  2. SendKeys 到新的进程控制台窗口以启动服务器.

这种方法感觉有点脆弱.无法保证目标用户将Node.js安装在同一位置,同时向过程发送密钥可能不是理想的解决方案.

另一种方法可能是:

  1. 编写一个执行的批处理文件nodevars.bat.
  2. 从C#应用程序执行批处理文件.

这似乎是一种更好的方法.但是,这里唯一的问题是nodevars.bat在新的控制台窗口中打开.

那么对于问题,有没有办法可以使用node.js安装中内置的功能启动node.js服务器脚本?也许发送论据node.exe

c# batch-file node.js

9
推荐指数
1
解决办法
5383
查看次数

使用不同的用户名连接到同一服务器

我使用以下方法列出文件夹的内容:

private void TestFtp()
{
    try
    {
        // List all of the files from FTP
        FtpWebRequest ftprequest = (FtpWebRequest)WebRequest.Create(new Uri("ftp://m3database/recover/"));

        ftprequest.Credentials = new NetworkCredential("myusername1", "********");

        ftprequest.Method = WebRequestMethods.Ftp.ListDirectory;
        ftprequest.UsePassive = false;
        ftprequest.Proxy = null;            

        using (var resp = ftprequest.GetResponse())
        {
            StreamReader reader = new StreamReader(resp.GetResponseStream());

            MessageBox.Show(reader.ReadToEnd());
        }
    }
    catch (Exception e)
    {
        MessageBox.Show(e.Message);
    }
}
Run Code Online (Sandbox Code Playgroud)

我通过FTP连接到单个Linux服务器.我使用的凭据myusername1myusername2连接.

如果我使用myusername1凭据,我可以在使用此功能时列出目录内容,但是如果我使用myusername2它,则会出现以下错误:

远程服务器返回错误:(503)错误的命令序列.

我尝试过的事情:

  1. 我试过设置ftprequest.KeepAlive = false.
  2. 我尝试过使用UsePassive,Proxy等的所有排列.
  3. 我可以使用FileZilla启用安全FTP连接到两个用户名,它们都可以工作.如果未启用FTP,则不会连接.

特殊情况是我的代码将myusername1在我的代码中未启用SSL的情况下连接使用.

综上所述:

  • myusername1myusername2 …

c# ftp wpf

7
推荐指数
1
解决办法
290
查看次数

从基类调用事件

我有以下场景:

public abstract class SomeBaseClass
{
    public event EventHandler SomeEvent;

    ...
}

public class SomeClass : SomeBaseClass
{
    public void DoSomething()
    {
        //TODO

        if (SomeEvent != null)
            SomeEvent(this, EventArgs.Empty);
    }
}
Run Code Online (Sandbox Code Playgroud)

SomeBaseClass有一个需要在基类中调用的事件,但是不能直接从基类调用该事件.为了解决这个问题,我可以覆盖基类中的事件,如下所示:

public class SomeClass : SomeBaseClass
{
    new public event EventHandler SomeEvent;
Run Code Online (Sandbox Code Playgroud)

我猜这很好,但我的问题是,是否存在某种通用方法或实施上述功能的良好实践

事实上,无法从基类调用事件表明我不应该首先这样做,也许调用事件的责任应该只在于SomeBaseClass

c# events inheritance

7
推荐指数
1
解决办法
6008
查看次数

接口隔离和单一责任原则的问题

我试图遵循接口隔离单一职责原则,但是我对如何将它们整合在一起感到困惑。

在这里,我有一个示例,其中有一些接口,我已将其拆分为更小、更直接的接口:

public interface IDataRead
{
    TModel Get<TModel>(int id);
}

public interface IDataWrite
{
    void Save<TModel>(TModel model);
}

public interface IDataDelete
{        
    void Delete<TModel>(int id);
    void Delete<TModel>(TModel model);
}
Run Code Online (Sandbox Code Playgroud)

我稍微简化了它(有一些where条款妨碍了可读性)。

目前我正在使用SQLite ,但是,这种模式的美妙之处在于,如果我选择不同的数据存储方法(例如Azure),它有望让我有机会更好地适应变化。

现在,我对每个接口都有一个实现,下面是每个接口的简化示例:

public class DataDeleterSQLite : IDataDelete
{
    SQLiteConnection _Connection;

    public DataDeleterSQLite(SQLiteConnection connection) { ... }

    public void Delete<TModel>(TModel model) { ... }
}

... 

public class DataReaderSQLite : IDataRead
{
    SQLiteConnection _Connection;

    public DataReaderSQLite(SQLiteConnection connection) { ... }

    public …
Run Code Online (Sandbox Code Playgroud)

c# interface single-responsibility-principle solid-principles interface-segregation-principle

6
推荐指数
2
解决办法
1623
查看次数

在UWP中振动电话

我正在尝试使用设备上的振动(Windows Phone),但是我似乎无法找到适合Windows 10的相应API.在Windows 8.x中,我可以使用,但不再是通用Windows平台中提供.

谁能指出我正确的方向?

c# win-universal-app uwp

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

使用枚举值表示两个枚举值

想象一下场景.

public enum SaveStates
{
    Saved,               //Represents a successful save.
    SavedWithChanges,    //Represents a successful save, where records were modified
    SavedWithoutChanges  //Represents a successful save, but no records were modified
}
Run Code Online (Sandbox Code Playgroud)

在这种情况下,Saved如果是SavedWithChanges ,则可以考虑枚举SavedWithoutChanges.

所以,如果我有一个像这样的变量:

SaveStates lastState = SaveStates.SavedWithoutChanges;
Run Code Online (Sandbox Code Playgroud)

我最好喜欢做这样的事情:

if (lastState == SaveStates.Saved)
{
    //The state is saved, do something awesome.
}
Run Code Online (Sandbox Code Playgroud)

我当然可以这样做:

if (lastState == SaveStates.SavedWithChanges || lastState == SaveStates.SavedWithoutChanges)
{
    ...
Run Code Online (Sandbox Code Playgroud)

然而,这有点乏味,我不能假设另一个开发人员将了解如何正确使用枚举.

每个枚举都是必需的,因为可能存在一个实例,我们可能希望在保存的情况下执行某些特定操作,例如没有更改.

我对其他设计理念持开放态度.

.net c# enums

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

Visual Studio显示了许多错误,但只有一个实际错误

我的解决方案中有一个自定义控件库,我的主WPF项目引用它.如果自定义控件库中存在错误,则错误列表会出现错误并显示数百个错误.这是一个这样的事件的例子.

错误列表

现在这只是我为了证明问题而强迫的一个错误.

在这种情况下,问题不是那么严重,因为只有 21个错误.但是,有些情况下我不得不过滤掉数百个错误,以找出造成其他一切失败的实际错误.

我相信我明白问题究竟是什么.我认为问题是由于没有构建自定义控件库,因此我的主项目找不到它的dll,因此无法找到自定义控件,这会导致错误.

现在,事实上,错误列表不是说谎,我的意思是,这些都是真正的错误.然而,话虽如此,有没有办法防止这种情况发生?

c# wpf compiler-errors

3
推荐指数
1
解决办法
346
查看次数

调用另一个方法时调用方法

这可能是一个愚蠢的问题,但这里有.

我有以下问题:

public class MyBaseClass
{
    public void SomethingAwesome()
    {
        //Awesome stuff happens here, but only when the Something() method
        //is called in the other classes.
    }
}

public class SomeClass : MyBaseClass
{
    public void Something()
    {
        //Something happens here
    }
}

public class SomeOtherClass : MyBaseClass
{
    public void Something()
    {
        //Something else happens here
    }
}
Run Code Online (Sandbox Code Playgroud)

MyBaseClass有一个方法,当从继承它的类中调用Something()方法时需要调用该方法.

这背后的想法是,我需要记录这个方法被调用时出于很多无聊的公司原因.我宁愿有一个基类,它可以在调用方法时自动进行审计,而不是让开发人员自己调用该方法.

可以实现这样的事情吗?如果是这样,怎么样?

我已经考虑过部分方法,但这需要具有相同名称的类,这在这种情况下是不可能的.

c# methods partial-methods class

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

将List转换为List <string>

我有以下问题:

public class AwesomeClass
{
    public string SomethingCool { get; set; }
    public string SomethingUseless { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

我有一个包含许多属性的类,我需要将这些类的列表转换为字符串列表,其中字符串表示类中的属性.

List<AwesomeClass> stuff = new List<AwesomeClass>();

//Fill the stuff list with some tings.

List<string> theCoolStuff = //Get only the SomethingCool property in the AwesomeClass list.
Run Code Online (Sandbox Code Playgroud)

我需要将其转换为字符串列表的原因是因为我有一个方法将List作为参数,但SomethingCool属性包含我需要此列表的数据.

注意:我可以在列表中使用foreach循环并填充字符串列表,但我正在寻找一种更优雅的方法,也许LINQ可以为我做这个吗?

c# linq list

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

JavaScript运行时错误:'Promise'未定义

我正在开发一个针对Android和Windows(通用)的Apache Cordova应用程序,但是在Windows平台上,我在运行应用程序时收到以下错误.

0x800a1391 - JavaScript运行时错误:'Promise'未定义

这个问题似乎是Windows通用应用程序所独有的,在Android上运行良好.

有问题的功能如下:

function requestData(ext, params, method) {
    return new Promise(function (resolve, reject) {
        var req = new XMLHttpRequest();

        var url = "https://someurlhere/api/" + ext;

        req.open(method, url, true);

        req.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
        req.setRequestHeader("Authorization", token);

        req.onreadystatechange = function () {//Call a function when the state changes.
            if (req.readyState == 4 && req.status == 200)
                resolve(JSON.parse(req.responseText));

            console.log(req.status + ' ' + req.statusText);
        }

        req.onerror = function () {
            reject(req.responseText);
        }

        req.send(params);
    });
};
Run Code Online (Sandbox Code Playgroud)

错误在以下行:

return new …
Run Code Online (Sandbox Code Playgroud)

javascript promise cordova win-universal-app

0
推荐指数
1
解决办法
1680
查看次数