我一直在遇到这样的情况,我觉得我缺少一个LINQ扩展方法,可以有效地检查集合中是否没有匹配的指定谓词.有Any和All,但如果我例如使用以下代码:
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码或更少的距离?它的语法糖不仅仅是一个实际的问题,但我只是觉得它缺失了.
是否有MVVM Light框架的文档或参考资料让我知道它的功能是什么?经过大量的谷歌搜索,我发现很少的东西.
我的字符串是
$string = ",name2,name2,name3,";
Run Code Online (Sandbox Code Playgroud)
我想让它变得像;
$string = "name2,name2,name3";
Run Code Online (Sandbox Code Playgroud)
也就是说,要删除该字符串中的第一个和最后一个逗号,有关如何通过正则表达式或其他任何方式完成此操作的任何线索?
谢谢.
我有一个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 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) 作为我正在进行的项目的一部分,我必须存储和恢复图像中的魔杖区域。为了获取用于存储的数据,我使用了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以获取组成该区域的矩形对象: …
我正在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#,我想做到这一点:
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毫秒而不冻结用户界面?
我有一些代码接受一个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某种方式弄乱了吗?
我目前正在研究将面向WPF的库移植到PCL库的选项,以便它可以在多个平台上使用,特别是Windows应用商店应用程序.
据我所知,可移植类库引用了您所定位的平台上支持的.NET库的子集,并且仅限于以下程序集:
微软将以下内容添加到:
但是,并非所有平台都支持所有这些程序集.在可移植类库项目中,指定要定位的平台,并且在项目中仅引用这些平台支持的程序集.如果您尝试引用您所针对的平台不支持的程序集,Visual Studio会警告您不兼容.所有平台都支持核心程序集(mscorlib.dll,System.dll,System.Core.dll和System.Xml.dll).
现在,在制作PCL库时,我得到的唯一参考是.NET Portable Subset,我无法添加任何引用; VS会告诉我已经添加了所有可能的引用.
现在我的问题很简单:什么时候确定实际的参考文献,谁决定这些?它是由编译器在编译时完成的,还是CLR在运行时完成的?
c# ×8
.net ×1
arrays ×1
asp.net-core ×1
auth0 ×1
drawing ×1
enums ×1
kubernetes ×1
linq ×1
log4net ×1
marshalling ×1
mvvm-light ×1
newline ×1
php ×1
pointers ×1
rectangles ×1
regex ×1
region ×1
string ×1
thread-sleep ×1