C#8.0引入了可为空的引用类型。这是一个具有可空属性的简单类:
public class Foo
{
public String? Bar { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
有没有一种方法可以通过反射检查类属性是否使用可为空的引用类型?
我正在尝试在 .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 …
我想ListCollectionView用泛型创建一个,IList<T>但构造函数获取一个非泛型IList。如何将列表从转换IList<T>为IList?
如果还有另一种ListCollectionView使用泛型创建的方法,IList<T>我想听听:)
在.Net Core中,许多I/O方法都有异步版本,微软建议我们使用它们以获得更好的性能。
\n\n但众所周知,异步方法在普通锁中无法正常工作,因为普通锁是相对于线程而言的。
\n\n例如\xef\xbc\x8c在MemoryCache中使用ReadWriteLocker。当MemoryCache丢失时\xef\xbc\x8c我需要从数据库读取数据。\n我现在知道2种方法来解决这个问题:
\n\n那么回到标题,当我必须在锁定中使用异步方法时,最好的方法是什么?我需要一些建议。\n非常感谢您阅读我蹩脚的英语。
\n我是 C# 编程的新手,我刚刚安装了 .NET SDK,但是我很困惑是否应该安装 .NET Core SDK 还是应该单独保留 .NET SDK。我试过在谷歌和 YouTube 上搜索,但找不到答案。
今天编程的时候出现了下面的情况。泛型方法接受不可为 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);
有人对此有一些好的见解吗?
我正在 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# 中创建一个距离计算器,使用半正弦方程来计算经度和纬度之间的距离,但它给出了错误的输出,谁能明白为什么?第一个 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) 让我们考虑这段代码:
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
在封送代码中,这对我来说是个大问题。我应该信任谁?
c# ×10
nullable ×2
.net ×1
.net-5 ×1
.net-core ×1
async-await ×1
bitconverter ×1
boolean ×1
code-editor ×1
expression ×1
generics ×1
haversine ×1
locking ×1
reflection ×1
resharper ×1
sizeof ×1
stream ×1
wpf ×1