小编can*_*on7的帖子

如何使用.NET反射检查可为空的引用类型

C#8.0引入了可为空的引用类型。这是一个具有可空属性的简单类:

public class Foo
{
    public String? Bar { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

有没有一种方法可以通过反射检查类属性是否使用可为空的引用类型?

c# reflection nullable nullable-reference-types

11
推荐指数
4
解决办法
212
查看次数

在 Entity Framework Core 3 中添加两个表达式来创建谓词不起作用

我正在尝试在 .NET Core 应用程序中使用 C# 和 Entity Framework Core 3 构建“And”谓词方法。

该函数将两个表达式相加,并将其传递给 IQueryable 代码:

public Expression<Func<T, bool>> AndExpression<T>
                    (Expression<Func<T, bool>> left, Expression<Func<T, bool>> right)
{
      var andExpression = Expression.AndAlso(
           left.Body, Expression.Invoke(right,
           left.Parameters.Single()));

      return Expression.Lambda<Func<T, bool>>(andExpression, left.Parameters);
}
Run Code Online (Sandbox Code Playgroud)

函数的调用

Expression<Func<Entity, bool>> left = t => t.Id == "id1";
Expression<Func<Entity, bool>> right = t => t.Id == "id2";
var exp = AndExpression(left, right);
this.dbContext.Set<Entity>().source.Where(exp).ToList();
Run Code Online (Sandbox Code Playgroud)

我的代码在 EF Core 2 版本中运行良好,但在我将版本更新到版本 3 后,它抛出以下异常

LINQ 表达式 'Where( source: DbSet, predicate: (s) => (t => t.Id …

c# expression entity-framework-core

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

Resharper 关闭类型提示

如何关闭Visual Studio 2019 C#代码编辑器中的类型提示? 在此处输入图片说明

c# resharper code-editor

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

如何将通用IList &lt;T&gt;转换为IList?

我想ListCollectionView用泛型创建一个,IList<T>但构造函数获取一个非泛型IList。如何将列表从转换IList<T>IList

如果还有另一种ListCollectionView使用泛型创建的方法,IList<T>我想听听:)

c# wpf

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

在锁中使用异步方法的最佳实践是什么

在.Net Core中,许多I/O方法都有异步版本,微软建议我们使用它们以获得更好的性能。

\n\n

但众所周知,异步方法在普通锁中无法正常工作,因为普通锁是相对于线程而言的。

\n\n

例如\xef\xbc\x8c在MemoryCache中使用ReadWriteLocker。当MemoryCache丢失时\xef\xbc\x8c我需要从数据库读取数据。\n我现在知道2种方法来解决这个问题:

\n\n
    \n
  1. 将异步数据库查询方法转换为同步,例如“Wait”或“.Result”。
  2. \n
  3. 使用特殊的锁,例如redis锁或一些非官方的AsyncReaderWriteLocker。(我已经找到了一个,但我还没有读过它的代码,所以我不知道它的细节,成本或新的bug)
  4. \n
\n\n

那么回到标题,当我必须在锁定中使用异步方法时,最好的方法是什么?我需要一些建议。\n非常感谢您阅读我蹩脚的英语。

\n

c# locking async-await .net-core

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

安装 .NET SDK 5.0 后,我还应该安装 .NET Core 吗?

我是 C# 编程的新手,我刚刚安装了 .NET SDK,但是我很困惑是否应该安装 .NET Core SDK 还是应该单独保留 .NET SDK。我试过在谷歌和 YouTube 上搜索,但找不到答案。

.net c# .net-5

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

具有不可为 null 的泛型参数的 C# 泛型方法警告可能存在 null 引用

今天编程的时候出现了下面的情况。泛型方法接受不可为 null 的泛型参数。该方法基本上只是将通用值插入到集合中。但是,这会产生编译器警告,指示泛型参数可能为空。从表面上看,这似乎是编译器中的一个错误,并且与可为空值的设计相矛盾。然而,我确信有一些我没有看到的很好的解释。

请考虑以下情况的简化示例: public void M1<T>(T t, List<object> l) => l.Add(t); 编译器警告 t 中的 t 可能为 null l.Add(t)

另外,为了完整性,以下方法给出了相同的错误(如预期的那样): public void M1<T>(T? t, List<object> l) => l.Add(t);

有人对此有一些好的见解吗?

c# generics nullable nullable-reference-types

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

在 AWS Lambda 中获取“内部流位置已意外更改”

我正在 ASP.Net core 中实现文件上传。在 Windows 上本地测试时一切正常,但是当我在 AWS Lambda 上部署代码时,我得到了

“System.InvalidOperationException:内部流位置意外更改。在 Microsoft.AspNetCore.Http.Internal.ReferenceReadStream.VerifyPosition() 处,位于 Microsoft.AspNetCore.Http.Internal.ReferenceReadStream.Read(Byte[] 缓冲区,Int32 偏移量,Int32 计数) )在 System.IO.Stream.CopyTo(流目标,Int32 bufferSize)”

我的代码:

[HttpPost]
[Route("")]
[Authorize]
public IActionResult Store([FromForm] MyFiles files)
{
    var stream1 = files.File1.OpenReadStream();
    var stream2 = files.File2.OpenReadStream();
    string result;
    using (MemoryStream ms = new MemoryStream())
    {
        stream1.CopyTo(ms);
        ms.Position = 0;
        result= GetCrcForFile(ms);
    }
}

public class MyFiles
{
    public IFormFile File1 { get; set; }
    public IFormFile File2 { get; set; }
}

public string GetCrcForFile(Stream result)
{
    uint crc …
Run Code Online (Sandbox Code Playgroud)

c# stream asp.net-core-2.1

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

使用半正弦公式计算地理坐标距离给出了错误的输出

我正在 C# 中创建一个距离计算器,使用半正弦方程来计算经度和纬度之间的距离,但它给出了错误的输出,谁能明白为什么?第一个 long 和 lat 值是针对威尔士(班戈)的一个地方,另一个是针对英格兰(曼彻斯特)的一个地方这里是代码:

using System;

public static class Program
{
    static double toRadians(double angle)
    {
        return (angle * Math.PI) / 180;
    }

    static double CalcDistance(double lon1, double lon2, double lat1, double lat2)
    {
        lon1 = toRadians(lon1);
        lon2 = toRadians(lon2);
        lat1 = toRadians(lat1);
        lat2 = toRadians(lat2);
        //haversine formula
        double dlat, dlon;
        dlat = lat2 - lat1;
        dlon = lon2 - lon1;
        double a = Math.Pow(Math.Sin(dlat / 2), 2) *
            Math.Cos(lat1) * Math.Cos(lat2) *
            Math.Pow(Math.Sin(dlon / 2), 2); …
Run Code Online (Sandbox Code Playgroud)

c# latitude-longitude haversine

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

Marshal.Sizeof和BitConverter.GetBytes在布尔值上的行为不同

让我们考虑这段代码:

static void Main(string[] args)
{
    Console.WriteLine(Marshal.SizeOf(typeof(bool)));
    Console.WriteLine(String.Join(", ", BitConverter.GetBytes(true)));
}
Run Code Online (Sandbox Code Playgroud)

如果bool是1个字节,我希望它输出

1
1

如果bool是4个字节(作为一个int),我期望

4
1,0,0,0 //让我们忘记字节序

但是,它输出(在x64中)

4
1

在封送代码中,这对我来说是个大问题。我应该信任谁?

请注意,GetBytes将布尔值作为输入: 在此处输入图片说明

c# boolean sizeof bitconverter

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