小编Ale*_*eev的帖子

使用UTF8编码将字节转换为字符串是否安全?

今天我看到一个代码如下的问题:

var accumulator = "";
var buffer = new byte[8192];
while (true)
{
    var readed = stream.Read(buffer, 0, buffer.Length);
    accumulator += Encoding.UTF8.GetString(buffer, 0, readed);
    if (readed < buffer.Length)
        break;
}
var result = Encoding.UTF8.GetBytes(accumulator);
Run Code Online (Sandbox Code Playgroud)

我知道这段代码效率低但是安全吗?是否有一些字节序列会破坏结果?

c# utf-8

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

将聚合传递给Linq查询

除了聚合不同之外,我有几个几乎相同的查询.我正在尝试创建一个可以传递聚合函数的方法.到目前为止我的努力看起来像

public void ExecQuery(Func<IEnumerable<testtable>, float?> filter)
{           
    var results = from a in testtable
                  group a by a.TransactionDate.Month into j
                  select new
                  {
                      Month = j.Key,                              
                      Total = filter
                  };
}
Run Code Online (Sandbox Code Playgroud)

我希望能够使用它来调用它

ExecQuery(c => c.Sum(a=>a.Price));      
ExecQuery(c => c.Count());
Run Code Online (Sandbox Code Playgroud)

我觉得我很亲密.

.net c# linq lambda

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

实体框架关键问题

我尝试登录时遇到以下错误:

Project.Model.Identity.UserLogin :: EntityType'UserLogin'没有定义键.定义此EntityType的键.UserLogins:EntityType:EntitySet'UserLogins'基于没有定义键的'UserLogin'类型.

我试图在我的dbcontext中使用复合键

  // Primary Key
  this.HasKey(t => new { t.LoginProvider, t.ProviderKey, t.UserId });
Run Code Online (Sandbox Code Playgroud)

但它似乎无法选择它,看起来它正在搜索模型中的键而不是在上下文中,因为当我在模型中添加"[Key]"关键字时,它抱怨必须使用HasKey复合键

public partial class UserLogin
{
    [Key]
    public string LoginProvider { get; set; }
    [Key]
    public string ProviderKey { get; set; }
    [Key]
    public string UserId { get; set; }
    public virtual User User { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

我如何通过这个?我是否在模型中添加了HasKey,如果是这样,为什么不在上下文中添加它?

c# entity-framework composite-key

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

如何在不到10秒的时间内在sqlserver中的两个表中插入200万行

我目前正在使用存储过程在90到100秒内同时在两个表中插入100万条记录.这在我的场景中是不可接受的.我想找到一种方法将时间减少到不到10秒.

我已经尝试在订单之后插入一个非常慢的记录 - 大概花了一个小时.然后我尝试使用表值参数来插入所有记录一次.这使得时间缩短到90-100秒.

这是c#调用代码:

public Task<int> CreateGiftVoucher(IEnumerable<Gift> vouchersList)
{

    GiftStreamingSqlRecord record = new GiftStreamingSqlRecord(vouchersList);

    foreach (var t in vouchersList)
    {
        Console.WriteLine($"<<<<<gfts>>> {t}");
    }

    try
    {
        var connection = Connection;

        if (connection.State == ConnectionState.Closed) connection.Open();

        string storedProcedure = "dbo.usp_CreateGiftVoucher";

        var command = new SqlCommand(storedProcedure, connection as SqlConnection);
        command.CommandType = CommandType.StoredProcedure;

        var param = new SqlParameter();
        param.ParameterName = "@tblGift";
        param.TypeName = "dbo.GiftVoucherType";   
        param.SqlDbType = SqlDbType.Structured;             
        param.Value = record;

        command.Parameters.Add(param);
        command.CommandTimeout = 60;
        return command.ExecuteNonQueryAsync();                 

    }
    catch (System.Exception)
    {
        throw;
    }
    finally …
Run Code Online (Sandbox Code Playgroud)

c# sql-server optimization stored-procedures

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

在运行时将对象转换为字符串数组

我的代码中有一行:

var objects = ExternalApiGetObjects(....);
Run Code Online (Sandbox Code Playgroud)

在开发时,我只知道ExternalApiGetObjects返回一个Object实例。事实上,我确信objects变量是某种类型的数组。我想将objects变量传递给String.Join方法,但在运行时我得到了一个类似的异常:“'System.Int32[]' 类型的对象无法转换为'System.String[]' 类型。”

在大多数情况下, anobjects不会是字符串数组。它可以是一个 int 数组,甚至是某个用户类型的数组。我只知道对象是一个数组,我想调用ToString()该数组的每个项目以创建一个类型为string[].

如何将我的转换objectsstring[]

c# casting

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

为什么JsonConvert.DeserializeObject返回null值?

我有来自API的JSON回复.

{
  "@odata.context": "https://cmcs.crm8.dynamics.com/api/data/v8.2/$metadata#incidents(ticketnumber,statuscode)",
  "value": [{
    "@odata.etag": "W/\"605108\"",
    "ticketnumber": "CAS-00001-Q6C0P8",
    "statuscode": 1,
    "incidentid": "a5d7c7f9-c47d-e711-8123-c4346bdc3c21"
  }, {
    "@odata.etag": "W/\"636397\"",
    "ticketnumber": "CAS-00004-S4C7P3",
    "statuscode": 1,
    "incidentid": "ef3924a5-9c83-e711-8124-c4346bdc3c21"
  }, {
    "@odata.etag": "W/\"633434\"",
    "ticketnumber": "CAS-00009-C5F7J6",
    "statuscode": 1,
    "incidentid": "aa114330-1087-e711-8125-c4346bdc3c21"
  }, {
    "@odata.etag": "W/\"636027\"",
    "ticketnumber": "CAS-00010-L3P5Z1",
    "statuscode": 428350001,
    "incidentid": "4af58898-1f87-e711-8125-c4346bdc3c21"
  }, {
    "@odata.etag": "W/\"606942\"",
    "ticketnumber": "CAS-00002-S9G3Q1",
    "statuscode": 1,
    "incidentid": "99e563d6-4281-e711-8128-c4346bdcdf81"
  }, {
    "@odata.etag": "W/\"636348\"",
    "ticketnumber": "CAS-00003-D7L2W7",
    "statuscode": 1,
    "incidentid": "e5a8dd97-9583-e711-8129-c4346bdcdf81"
  }, {
    "@odata.etag": "W/\"610480\"",
    "ticketnumber": "CAS-00005-Y4J1G7",
    "statuscode": 1,
    "incidentid": "4eb6445c-eb83-e711-8129-c4346bdcdf81"
  }, {
    "@odata.etag": "W/\"636677\"",
    "ticketnumber": "CAS-00006-Y1S9F7", …
Run Code Online (Sandbox Code Playgroud)

c# json json.net

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

如何写入现有的txt文件c#

我创建了一些代码来创建一个带有初始文本的 txt 文件,但是当我尝试使用新的 msg 再次调用该方法时,它不会将其添加到 txt 文件中。下面是我的代码:

string example = "test";
WriteToLgo(example);

public static void WriteToLog(String inputtext)
{
   string location= @"C:\Users\";
   string NameOfFile = "test.txt";
   string fileName= String.Format("{0:yyyy-MM-dd}__{1}", DateTime.Now, NameOfFile);
   string path= Path.Combine(location, fileName);
   using (StreamWriter sr= File.CreateText(path))
   {
      sr.WriteLine(inputtext);
   }
}
Run Code Online (Sandbox Code Playgroud)

如果我再次尝试调用该方法,则不会添加新的 msg。任何帮助将不胜感激。

c# streamwriter

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

无法对调用静态方法的方法进行单元测试,如何重新设计该程序?

我有一个类,它在整个程序中将日志写入文本文件.我认为制作方法是一个好主意,static因为它只有几个方法,并且在程序的许多不同部分被调用.在程序开始时调用此方法一次以创建初始文件.

public static void CreateAuditLog()
{
    var fileName = Path.Combine(filePath, 
        $@"AuditFile{DateTime.Now:yyyy-MM-dd_hh-mm-ss-fff}.txt");

    writer = new StreamWriter(new FileStream(fileName,
        FileMode.CreateNew, FileAccess.Write));

    GetAuditLogFileSize();
}
Run Code Online (Sandbox Code Playgroud)

但是在编写单元测试时,我不知道你不能测试一个调用静态方法的方法.(来自代码库的示例方法)

public Decimal CalculateCurrentBalance
{
    get
    {
        var balance = TotalAmountBilled - TotalAmountPaid;
        Audit.Message(2, $"Balance: {balance} for: {Name}");
        return TotalAmountBilled - TotalAmountPaid;
    }
}
Run Code Online (Sandbox Code Playgroud)

消息方法有很多细节,所以我不会在这里发布所有内容,但基本上它需要一个数字和一条消息来记录到文本文件.流编写器故意保持打开状态,CreateAuditLog()以便Message()可以在许多不同的地方调用,并将消息写入日志文件.

public static void Message(int auditLevel, string message)
Run Code Online (Sandbox Code Playgroud)

我觉得我设计这个程序的方式很糟糕.有没有人对我如何重新设计这个有任何建议?我不知道如果不在程序中的每个其他类上创建我的日志记录类的实例,我怎么能做到这一点.

.net c# oop static unit-testing

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

列出排序问题

我有一个程序员列表:

programmers.Add(new Programmer("Jake", 1.9, 2000));
programmers.Add(new Programmer("Richard", 1.0, 1300)); 
Run Code Online (Sandbox Code Playgroud)

我需要创建一个新的排序程序员列表 value => 2000 / 1.9.(向上)

我无法弄清楚如何划分intdouble和排序programmers这个结果.你能帮帮我怎么做吗?

到目前为止,我已经尝试过:

var ProgrammersSorted = programmers.OrderBy((x,y) => x.DailyWage / y.Speed).ToList();
Run Code Online (Sandbox Code Playgroud)

程序员类:

public class Programmer
{
    public string Name { get; private set; }
    public double Speed { get; private set; }
    public int DailyWage { get; private set; }

    public Project Project { get; private set; }

    public string ProjectName
    {
        get
        {
            return Project?.Name ?? "No project …
Run Code Online (Sandbox Code Playgroud)

.net c# sorting list

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

使用 msbuild 命令行转换 web.config

希望设置 jenkins 来部署我的网络应用程序,我正在使用脚本

msbuild WEB.csproj /p:Configuration=stage /t:Build /p:PrecompileBeforePublish=true /p:OutputPath=c:\test /p:DeployOnBuild=true /p:AutoParameterizationWebConfigConnectionStrings=False
Run Code Online (Sandbox Code Playgroud)

我获得了 Web 应用程序,_PublishedWebsiteweb.config需要进行转换。有小费吗?

c# msbuild visual-studio web-config-transform jenkins

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

在枚举中切换语句.如何提高性能?

我有一个项目列表,我想使用Linq OrderByDescending排序.排序作为值传递给switch语句.

items.OrderByDescending((SomeObject)i => {
   switch(cond)
   {
      case "conditionA":
        return (float)i.MemberA;
      case "conditionB":
        return (long)i.MemberB;
      case "conditionC":
        return (int)i.MemberB;
   }})
Run Code Online (Sandbox Code Playgroud)

我关心的是这个循环的性能.有没有办法预先定义返回值并将其传递给循环一次?

c# linq performance

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