小编aev*_*tas的帖子

在LINQ中是否有"None()"的等价物?

我一直在遇到这样的情况,我觉得我缺少一个LINQ扩展方法,可以有效地检查集合中是否没有匹配的指定谓词.有AnyAll,但如果我例如使用以下代码:

if (Objects.All(u => u.Distance <= 0))

如果集合中的所有对象都在0码或更远的距离,则返回true.

if (Objects.Any(u => u.Distance <= 0))

如果集合中至少有一个对象距离我不到0码,则返回true.

到目前为止,这些方法都很有意义,而且它们的语法也很有意义.现在,如果我想检查是否没有距离为0或更小的对象,我必须将All方法内部的谓词反转>= 0<= 0或调用!All(),这在某些情况下会导致代码非常难以理解.

有没有方法可以有效Collection.None(u => u.Distance <= 0)地检查集合中是否有0码或更少的距离?它的语法糖不仅仅是一个实际的问题,但我只是觉得它缺失了.

.net c# linq

29
推荐指数
2
解决办法
6541
查看次数

MVVM Light的文档在哪里?

是否有MVVM Light框架的文档或参考资料让我知道它的功能是什么?经过大量的谷歌搜索,我发现很少的东西.

mvvm-light

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

删除字符串之前或之后的逗号?

我的字符串是

$string = ",name2,name2,name3,";
Run Code Online (Sandbox Code Playgroud)

我想让它变得像;

$string = "name2,name2,name3";
Run Code Online (Sandbox Code Playgroud)

也就是说,要删除该字符串中的第一个和最后一个逗号,有关如何通过正则表达式或其他任何方式完成此操作的任何线索?

谢谢.

php regex

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

log4net如何在页脚后添加新行

我有一个log4net的配置如下:

<log4net>
    <appender name="LogFileAppender" type="log4net.Appender.FileAppender">
      <file value="C:\...\log-file.txt" />
      <appendToFile value="true" />
      <layout type="log4net.Layout.PatternLayout">
        <header value ="Start new file proccessing..."/>
        <conversionPattern value="%newline%date - %message%exception" />
        <footer value ="Finish with the proccessing"/>
      </layout>
    </appender>
    <root>
      <level value="DEBUG" />
      <appender-ref ref="LogFileAppender" />
    </root>
  </log4net>
Run Code Online (Sandbox Code Playgroud)

它工作正常,但我希望我可以在我的页脚之后添加一个新行,所以当我不止一次地添加到我的日志文件时,上一次运行的页脚不会与开头(标题)保持在同一行第二轮.

例:

Operation started..
....
Operation endedOperationStarted
....
Operation ended
Run Code Online (Sandbox Code Playgroud)

我希望我可以看起来像:

Operation started..
....
Operation ended
OperationStarted
....
Operation ended
Run Code Online (Sandbox Code Playgroud)

c# log4net newline

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

在C#中将字符串数组编组为char**

我正在调用C DLL函数,需要提供以下C结构:

typedef struct
{
    char      *mTableId;
    char     **mFieldNames;
    int        mNumFields;
    char      *mFilter;
    char      *mSort;
    int        mOffset;
    int        mMaxRecords;
    char      *mTargetRecordFilter;
    int        mSurroundingRecordsCount;
    int       *mOwnerIds;
    int     mNumOwnerIds;
    gsi_bool   mCacheFlag;
} SAKESearchForRecordsInput;
Run Code Online (Sandbox Code Playgroud)

问题在于char**mFieldNames; 我试过像这样自动编组:

[MarshalAs(UnmanagedType.LPArray,ArraySubType = UnmanagedType.LPTStr,SizeConst = 9)] public String [] mFieldNames;

这样我在Marshal.SizeOf()中得到一个错误 - 无法计算正确的大小.然后我决定手动处理指针.它实际上只是一个指向C字符串数组的指针.这是我的代码导致的

System.AccessViolationException:尝试读取或写入受保护的内存.这通常表明其他内存已损坏.

所以我搞砸了指针.代码对我来说似乎没问题,bug在哪里?

C#:

 [StructLayout(LayoutKind.Sequential)]
 unsafe public class SAKESearchForRecordsInput {
  [MarshalAs(UnmanagedType.LPTStr)]
  public String mTableId;
  //[MarshalAs(UnmanagedType.LPArray, ArraySubType = UnmanagedType.LPTStr, SizeConst = 9)] // HARDCODED!?!
  //public String[] mFieldNames;      // char     **mFieldNames;
  public IntPtr mFieldNames;
  public int mNumFields;
  [MarshalAs(UnmanagedType.LPTStr)] …
Run Code Online (Sandbox Code Playgroud)

c# arrays string pointers marshalling

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

如何绘制矩形集合的轮廓?

作为我正在进行的项目的一部分,我必须存储和恢复图像中的魔杖区域。为了获取用于存储的数据,我使用了GetRegionData方法。正如规范所指定的,该方法:

返回一个 RegionData,它表示描述该 Region 的信息。

我将保留byte[]在属性中的RegionData.Data内容存储在 Base64 字符串中,因此我可以RegionData通过某种非常规的方法检索后者:

// This "instantiates" a RegionData object by simply initiating an object and setting the object type pointer to the specified type.
// Constructors don't run, but in this very specific case - they don't have to. The RegionData's only member is a "data" byte array, which we set right after.
var regionData =
    (RegionData)FormatterServices.GetUninitializedObject(typeof(RegionData));
regionData.Data = bytes;
Run Code Online (Sandbox Code Playgroud)

然后,我创建一个Region并将上述RegionData对象传递到构造函数中,并调用GetRegionScans以获取组成该区域的矩形对象: …

c# drawing rectangles region

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

ASP.NET Core 2.1 Cookie身份验证似乎具有服务器相​​似性

我正在ASP.NET Core 2.1中开发一个应用程序,并在Kubernetes群集上运行它。我已经使用Auth0作为提供者,使用OpenIDConnect实现了身份验证。

这一切都很好。标有该[Authorize]属性的操作或控制器将匿名用户重定向到身份提供者,他们登录,重定向回来,而Bob是您的叔叔。

当我将部署扩展到2个或更多容器时,就会开始出现问题。当用户访问应用程序时,他们将登录,并根据回调过程中为它们提供服务的容器,身份验证是成功还是失败。即使在身份验证成功的情况下,当用户点击未授权的容器时,反复进行F5-ing操作也会最终重定向到身份提供者。

我对此的思路是,使用cookie身份验证,用户将cookie存储在浏览器中,并随每个请求一起传递,应用程序对其进行解码并获取JWT,然后从中获取声明,然后用户已认证。这使整个事情变得无状态,因此,不管为请求提供服务的容器如何,它都应该工作。但是,如上所述,它似乎并没有以这种方式实际工作。

我的配置Startup.cs如下所示:

services.AddAuthentication(options =>
    {
        options.DefaultAuthenticateScheme = CookieAuthenticationDefaults.AuthenticationScheme;
        options.DefaultSignInScheme = CookieAuthenticationDefaults.AuthenticationScheme;
        options.DefaultChallengeScheme = CookieAuthenticationDefaults.AuthenticationScheme;
    })
    .AddCookie()
    .AddOpenIdConnect("Auth0", options =>
    {
        options.Authority = $"https://{Configuration["Auth0:Domain"]}";

        options.ClientId = Configuration["Auth0:ClientId"];
        options.ClientSecret = Configuration["Auth0:ClientSecret"];

        options.ResponseType = "code";

        options.Scope.Clear();
        options.Scope.Add("openid");
        options.Scope.Add("profile");
        options.Scope.Add("email");

        options.TokenValidationParameters = new TokenValidationParameters
        {
            NameClaimType = "name"
        };

        options.SaveTokens = true;

        options.CallbackPath = new PathString("/signin-auth0");

        options.ClaimsIssuer = "Auth0";

        options.Events = new OpenIdConnectEvents
        {
            OnRedirectToIdentityProviderForSignOut = context =>
            {
                var logoutUri =
                    $"https://{Configuration["Auth0:Domain"]}/v2/logout?client_id={Configuration["Auth0:ClientId"]}";

                var postLogoutUri …
Run Code Online (Sandbox Code Playgroud)

c# openid-connect kubernetes auth0 asp.net-core

5
推荐指数
2
解决办法
1387
查看次数

Thread.Sleep()没有冻结UI

首先,我是初学者C#,我想做到这一点:

class2.method_79(null, RoomItem_0, num, num2, 0, false, true, true);
System.Threading.Thread.Sleep(250);
class2.method_79(null, RoomItem_0, num, num4, 0, false, true, true);
System.Threading.Thread.Sleep(300);
class2.method_79(null, RoomItem_0, num, num6, 0, false, true, true);
Run Code Online (Sandbox Code Playgroud)

但是这个解决方案会冻结用户界面,我怎样才能让第二个事件在第一个事件发生后250毫秒而不冻结用户界面?

c# thread-sleep

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

打印枚举值时出现意外输出

我有一些代码接受一个ulong参数,并通过使用映射字典,将ulong映射到一个值enum.但是,枚举包含的值对于所有意图都是相同的,因此稍后将以与以下枚举中类似的方式在枚举中重新分配这些值AfricanMango:

public enum Fruits
{
    Banana = 0,
    Strawberry,
    Apple,
    Peach,
    Mango,
    Berry,

    AfricanMango = Mango,

    Cranberry
}
Run Code Online (Sandbox Code Playgroud)

应该告诉编译器对两者使用相同的值,AfricanMango并且Mango从设计的角度来看这个实现是否真的有意义.

我的代码将输入转换为枚举值就好了,在评估函数的结果时,它返回了Fruits.Cranberry.这是我期待的价值.

但是,随后使用该函数(调试器的结果,当要求保护的Fruits.Cranberry),其结果突然偏移到Fruits.Berry,因为可以通过运行下面的代码来证明:

var fruit = Fruits.Cranberry;

Console.WriteLine(fruit);
Run Code Online (Sandbox Code Playgroud)

人们会期望这会输出Cranberry,因为这是它所分配的值,但实际上这是输出Berry.

这是预期的行为吗?枚举是根据它们之前的值来查找的,并且是以AfricanMango某种方式弄乱了吗?

c# enums

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

PCL参考如何解决?

我目前正在研究将面向WPF的库移植到PCL库的选项,以便它可以在多个平台上使用,特别是Windows应用商店应用程序.

据我所知,可移植类库引用了您所定位的平台上支持的.NET库的子集,并且仅限于以下程序集:

  • mscorlib.dll中
  • System.dll中
  • System.Core.dll
  • system.xml.dll的
  • System.ComponentModel.Composition.dll
  • System.Net.dll
  • System.Runtime.Serialization.dll
  • System.ServiceModel.dll
  • System.Xml.Serialization.dll
  • System.Windows.dll(来自Silverlight)

微软将以下内容添加到:

但是,并非所有平台都支持所有这些程序集.在可移植类库项目中,指定要定位的平台,并且在项目中仅引用这些平台支持的程序集.如果您尝试引用您所针对的平台不支持的程序集,Visual Studio会警告您不兼容.所有平台都支持核心程序集(mscorlib.dll,System.dll,System.Core.dll和System.Xml.dll).

现在,在制作PCL库时,我得到的唯一参考是.NET Portable Subset,我无法添加任何引用; VS会告诉我已经添加了所有可能的引用.

现在我的问题很简单:什么时候确定实际的参考文献,决定这些?它是由编译器在编译时完成的,还是CLR在运行时完成的?

c# portable-class-library

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