我正在寻找一个简洁的RegEx解决方案来取代
有一个空间
对于那些在家里玩的人(以下工作)
text.replace(/[^a-z0-9]/gmi, " ").replace(/\s+/g, " ");
Run Code Online (Sandbox Code Playgroud)
我的想法是RegEx可能足以在一个声明中实现这一点.我觉得id需要的组件是
[^a-z0-9] - 删除非Alpha数字字符 \s+ - 匹配任何空间集合\r?\n|\r - 匹配所有新行/gmi - 全局,多行,不区分大小写但是,我似乎无法以正确的方式设置正则表达式(以下不起作用)
text.replace(/[^a-z0-9]|\s+|\r?\n|\r/gmi, " ");
Run Code Online (Sandbox Code Playgroud)
输入
234&^%,Me,2 2013 1080p x264 5 1 BluRay
S01(*&asd 05
S1E5
1x05
1x5
Run Code Online (Sandbox Code Playgroud)
期望的输出
234 Me 2 2013 1080p x264 5 1 BluRay S01 asd 05 S1E5 1x05 1x5
Run Code Online (Sandbox Code Playgroud) 关于效率,有谁知道编译器是否足够聪明,无法1, 3, 5在以下代码中创建不包含循环的每次迭代的数组?
var foo = new List<int> { 1, 2, 3, 4, 5 };
foo.RemoveAll(i => new[] { 1, 3, 5 }.Contains(i));
Run Code Online (Sandbox Code Playgroud)
我更喜欢它是为了提高可读性,但不是出于性能考虑。
我有一个父实体,需要进行并发检查(如下所示)
[Timestamp]
public byte[] RowVersion { get; set; }
Run Code Online (Sandbox Code Playgroud)
我有一堆客户机进程,它们从该父实体访问只读值,并主要更新其子实体。
约束
客户之间不应干涉彼此的工作(例如,更新子记录不应在父实体上引发并发异常)。
我有一个确实更新此父实体的服务器进程,在这种情况下,如果父实体已更改,则客户端进程需要抛出。
注意:客户端的并发检查是牺牲性的,服务器的工作流程是关键任务。
问题
我需要检查(从客户端进程中)父实体是否已更改,而没有更新父实体的行版本。
在EF中对父实体进行并发检查很容易:
// Update the row version's original value
_db.Entry(dbManifest)
.Property(b => b.RowVersion)
.OriginalValue = dbManifest.RowVersion; // the row version the client originally read
// …Run Code Online (Sandbox Code Playgroud) c# sql-server entity-framework database-concurrency entity-framework-6
好吧,这更令人烦恼而不是问题.没有错误
页
<ContentPage
...
x:Name="This"
//hack to have typed xaml at design-time
BindingContext="{Binding Source={x:Static viewModels:ViewModelLocator.ChooseTargetLocationVm}}"
Run Code Online (Sandbox Code Playgroud)
子视图
<views:ProductStandardView
...
BindingContext="{Binding Product}">
<Grid.Triggers>
<DataTrigger
Binding="{Binding Path=BindingContext.IsVacate, Source={x:Reference This}}"
TargetType="Grid"
Value="true">
<Setter Property="BackgroundColor" Value="{StaticResource WarningColor}" />
</DataTrigger>
</Grid.Triggers>
Run Code Online (Sandbox Code Playgroud)
当绑定到BindingContext从源 参考的This,我得到一个XAML"警告"
无法在"对象"类型的数据上下文中解析属性"IsVacate"
Binding="{Binding Path=BindingContext.IsVacate, Source={x:Reference This}}"
Run Code Online (Sandbox Code Playgroud)
显然,BindingContext是一个对象并且是无类型的.但是上面的代码编译和工作
我想要做的就是施放它,首先是因为我有OCD,但主要是因为它很容易在IDE页面通道栏上发现真正的问题
以下似乎合乎逻辑但不起作用
Binding="{Binding Path=BindingContext.(viewModels:ChooseTargetLocationVm.IsVacate),
Source={x:Reference This}}"
Run Code Online (Sandbox Code Playgroud)
在输出中我得到
[0:]绑定:'(
viewModels:ChooseTargetLocationVm'找不到属性'Inhouse.Mobile.Standard.ViewModels.ChooseTargetLocationVm',目标属性:'Inhouse.Mobile.Standard.Views.ProductStandardView.Bound'
我理解错误,但我还会怎么样?
只是为了愚蠢,显然以下不会编译
Binding="{Binding Path=((viewModels:ChooseTargetLocationVm)BindingContext).IsVacate, Source={x:Reference This}}"
Run Code Online (Sandbox Code Playgroud)
那么有没有办法将BindingContext转换为ViewModel, …
我需要有关泛型和委托方差的更多信息.以下代码段无法编译:
错误CS1961无效方差:类型参数'TIn'必须在'Test.F(Func)'上协变有效.'TIn'是逆变的.
public interface Test<in TIn, out TOut>
{
TOut F (Func<TIn, TOut> transform);
}
Run Code Online (Sandbox Code Playgroud)
.net Func定义如下:
public delegate TResult Func<in T, out TResult> (T arg);
Run Code Online (Sandbox Code Playgroud)
为什么编译器抱怨TIn逆变和TOut- 协变而Func期望完全相同的方差?
编辑
对我来说主要的限制是我希望我的Test界面将TOut作为协变,以便使用它:
public Test<SomeClass, ISomeInterface> GetSomething ()
{
return new TestClass<SomeClass, AnotherClass> ();
}
Run Code Online (Sandbox Code Playgroud)
鉴于此public class AnotherClass : ISomeInterface.
我正在开发一个Fluent Api来提供相当可配置的服务,并且只是尝试为下面的问题提供一个简洁的解决方案.
我有一个这样的课
public class WindowVm : DialogResultBase<MyReturnType>
Run Code Online (Sandbox Code Playgroud)
一切都很好,但是任何人都可以想到一种方法来实现以下,而不必详细说明给定的第二种通用类型即
public IDialogWithResult<TViewModel, TSomeReturnType> DialogWithResult<TViewModel,TSomeReturnType>(object owner = null)
where TViewModel : DialogResultBase<TSomeReturnType>
Run Code Online (Sandbox Code Playgroud)
IDialogWithResult<TViewModel, TSomeReturnType>即使我必须在2个陈述中做到这一点,我真的只对结果感兴趣
所以我可以打电话
.DialogWithResult<WindowVm>()
Run Code Online (Sandbox Code Playgroud)
我知道所有信息都在那里并在编译时声明,我也知道这是部分推理及其全部或全部.然而,我只是想知道是否有一些技巧,而不必重新声明
.DialogWithResult<WindowVm, ResultType>();
Run Code Online (Sandbox Code Playgroud)
此外,我有一个方法需要ResultType作为(你猜对了)一个结果类型
ResultType MyResult = ...DialogWithResult<WindowVm, ResultType>()
.ShowModal();
Run Code Online (Sandbox Code Playgroud)
我的意思
ResultType是,在游戏的这一点上真的是多余的,因为它已经被宣布了WindowVm.如果消费者不必去寻找它(即使它意味着超过一步),那将是很好的
我收到了错误
属性参数必须是属性参数类型的常量表达式,typeof表达式或数组创建表达式
请注意下面的截图:
请注意,如果我将DataRow属性与一个或三个参数一起使用,则不会出现编译错误.但是如果我使用两个参数而第二个参数是一个字符串数组,那么我确实会遇到编译错误.
DataRowAttribute的签名是public DataRowAttribute (object data1);和public DataRowAttribute (object data1, params object[] moreData);
第一个给了我没问题,但第二个似乎变得困惑.
我认为params object[]可能会引起一些混乱.也许它无法确定我的意思[DataRow(new[] { 1 }, new[] { "1" })]还是[DataRow(new[] { 1 }, "1")]
为了解决这个问题,我尝试将第二个属性转换为object([DataRow(new[] { 1 }, (object)new[] { "1" })]),但错误没有消失,它警告我演员阵容是多余的.我也尝试明确指定数组的类型,但这也没有帮助.
我可以添加第三个虚拟参数,即使null似乎解决了这个问题,但这只是一种解决方法.这样做的正确方法是什么?
我试图通过启动一个线程让我的机器人框架机器人回复用户.通过这种方式,我可以在一个有很多人的频道中保持机器人正在与谁交谈.
根据松弛的文档,我需要做的是将thread_ts属性设置为ts发送到我的机器人的属性.我尝试了一些事情并且无法实现这一目标.这是我最简洁的例子:
var reply = (Activity)activity;
reply = reply.CreateReply("reply");
reply.ChannelData = JObject.Parse($"{{thread_ts:'{ts}'}}");
await context.PostAsync(reply);
Run Code Online (Sandbox Code Playgroud)
这不适合我.
我是C#的初学者,我通过解决数据结构案例场景来解决它.我需要帮助可视化以下代码段中发生的事情
public void AddAtLast(object data)
{
Node newNode = new Node();
newNode.Value = data;
current.Next = newNode;
current = newNode;
Count++;
}
Run Code Online (Sandbox Code Playgroud)
我明白了什么部分
我知道在链表的末尾添加了一个新节点.此外,新节点从函数参数获取其值.
我需要帮助的是什么
我特别想到为什么current.Next指向newNode,不应该指向NULL,因为我newNode将被放置在链表的末尾,所以它应该指向NULL.
另外,我们为什么这样做current=newNode?
我理解为什么count++存在可能是因为想要跟踪添加新元素的位置,但如果我的理解错误,请纠正我.
我创建了以下扩展方法
public static T Map<TEntity,T>(this TEntity entity) where TEntity : IEntity
{
return Mapper.Map<TEntity, T>(entity);
}
Run Code Online (Sandbox Code Playgroud)
这允许以下内容
Db.ExchangeSets.FirstOrDefault().Map<ExchangeSet, ExchangeSetSimpleViewModel>()
Run Code Online (Sandbox Code Playgroud)
但是我想知道无论如何我可以修改扩展方法,所以我可以调用如下的短路版本
Db.ExchangeSets.FirstOrDefault().Map<ExchangeSetSimpleViewModel>()
Run Code Online (Sandbox Code Playgroud)
请注意 :
是否应该像这样使用automapper不在问题的范围内,它更像是一个事实发现任务
对于那些在家里玩的人,在scotts评论的帮助下,我设法找到一个额外的解决上述功能的通用扩展方法为automapper
public static T Map<T>(this IEntity entity)
{
return (T)Mapper.Map(entity, entity.GetType(), typeof(T));
}
Run Code Online (Sandbox Code Playgroud)
但是除了AutoMapper之外,这不是实际问题的答案,而是相应地标记优点
c# ×9
generics ×3
alphanumeric ×1
arrays ×1
botframework ×1
javascript ×1
linked-list ×1
linq ×1
list ×1
regex ×1
replace ×1
slack ×1
sql-server ×1
variance ×1