我在表单上构建一个对象:
return table.Rows.Cast<DataRow>()
.Select(row => new Something
{
Field = row["field1"] as int?,
Bunch = GetBunch(index)
});
Run Code Online (Sandbox Code Playgroud)
使用GetBunch()如下.
private IList GetBunch(int index) { ... }
Run Code Online (Sandbox Code Playgroud)
它的工作原理应该如此.现在,我们已经注意到我们需要在我们放入Bunch的数组中添加一个额外的元素.由于一系列原因,不能更改方法的签名,也不可能在其中添加额外元素.
我试着像这样添加额外的东西:
return table.Rows.Cast<DataRow>()
.Select(row => new Something
{
Field = row["field1"] as int?,
Bunch = GetBunch(index).Add(new Thingy() { ... })
});
Run Code Online (Sandbox Code Playgroud)
但它不起作用,因为Add()不返回包含新元素的原始数组.它返回一个int.如果原始对象是不可变的,Add()的结果将是我想要的,但显然,它不是.
是否有可能使可变对象不稳定?如果没有(因为我相当肯定不是),我怎么能轻易处理?(很容易=没有存储创建的东西,然后访问它并向Bunch属性的数组添加一个元素.)
注意,在这种情况下,结果的顺序并不重要.适当的类型将是某种类型的袋子,但我是由现有的设计手工绑定.
在这个帖子中,我验证了正确完成了从复合字段中隐藏某些单个字段的正确方法.其他来源似乎也证实了这一点.但是,尽管规则定义如下:
我仍然会在帐户表单上显示愚蠢的字段.它看起来如下图所示,是我磨牙的高级烦恼和原因.我错过了什么?(是的,我确实激活了规则并重新加载了表单.)
在我下面举例说明的设置中,直到最近我才注意到当扩展器中列出的元素列表增长时(使其长度超过其旁边面板中按钮的长度),它不会悬停正如直观预期的那样,在数据网格上。相反,它将它向下推,这使得整个 GUI 看起来垂直跳跃。
<StackPanel>
<StackPanel Orientation="Horizontal">
<StackPanel>
<Expander>...</Expander>
</StackPanel>
<StackPanel>
<Button ... /><Button ... /><Button ... />
</StackPanel>
</StackPanel>
<StackPanel Orientation="Horizontal">
<DataGrid ... />
</StackPanel>
</StackPanel>
Run Code Online (Sandbox Code Playgroud)
解决此问题的一种方法是将所有内容放在网格中的同一个单元格中,最后添加扩展器。然而,在我看来,这在几个层面上都是不合适的。相反,我更愿意强制扩展器在其他控件上方无接触地扩展。它应该影响布局,但仅影响其折叠状态的大小。扩展不应该影响布局。
我怎么能告诉愚蠢的扩张者不要那么咄咄逼人?
根据MSDN,由于线程和缓存,不建议使用成员变量.请注意,这个问题涉及多个领域,虽然我确信它主要与.NET/C#相关,但它可能会特定于CRM.它可能不会,但单挑可能是明智的.
虽然我已经牢牢掌握了可能出现的问题,但我并不完全确定我理解超出警告限制的确切和准确的情况.我关注的确切报价如下.
为了提高性能,Microsoft Dynamics CRM缓存插件实例.应该将插件的Execute方法编写为无状态,因为每次调用插件时都不会调用构造函数.此外,多个系统线程可以同时执行插件.所有每个调用状态信息都存储在上下文中,因此您不应使用全局变量或尝试将任何数据存储在成员变量中,以便在下一个插件调用期间使用,除非该数据是从提供给构造函数的配置参数中获取的.对插件注册的更改将导致插件重新初始化.
我的课程遵循以下原则.
public partial class Blopp : IPlugin
{
private IPluginExecutionContext Context { get; set; }
private Entity Target { get; set; }
private IOrganizationService Service { get; set; }
...
public Blopp() : this(String.Empty) { }
public Blopp(String a) : this(a, String.Empty) { }
public Blopp(String a, String b) { ... }
public void Execute(IServiceProvider serviceProvider)
{
try
{
Assign(serviceProvider);
DoStuff();
}
catch (Exception) { }
finally …
Run Code Online (Sandbox Code Playgroud) 我有以下几行按预期工作。
Dictionary<Guid, List<T>> dictionary = source.ToDictionary(
element => element.Id,
element => element.Ts.ToList());
Run Code Online (Sandbox Code Playgroud)
但是,我希望第一行使用IEnumerable,这会产生类型不匹配的错误。
Dictionary<Guid, IEnumerable<T>> dictionary = source.ToDictionary( ... );
Run Code Online (Sandbox Code Playgroud)
使用ToArray而不是ToList对我没有帮助(得到同样的错误,而且我已经学会了不要在 C# 中使用数组,除非确实需要)并且据我所知,Ts的类型是ICollection。
是否可以按照我希望的方式转换整个 Shabang,而无需使用硬核和使用铸造?
根据网上的内容,它是6.1.2,但根据我从同事那里获得的文件中的版本号,它比这更高.
EF由Microsoft提供,因此MSDN应该是正确的检查位置.不是吗?
请注意,我不是在谈论Azurific预览版本7.我正在谈论版本6但是后来的颠覆.我们信任谁?
我有一个方法应该返回label.text中当前用户的域名.我在表单的load事件中调用该方法但没有出现,代码中也没有错误.也许我启动对象错了?如果我直接将方法代码放在load事件中,它就可以工作.
public partial class Main Form
{
public Main()
{
InitializeComponent();
}
public string getCurrentDomain()
{
return domainNameValue.Text = Environment.UserDomainName;
}
public void Main_Load(object sender, EventArgs e)
{
Main main = new Main();
main.getCurrentDomain();
}
}
Run Code Online (Sandbox Code Playgroud) 我们有一个处理程序,它在收到消息时执行.该过程中有几个步骤,每个步骤都创建自己的新上下文,如下所示.
public void Handle(SomeMessage message)
{
...
try
{
...
using(DataContext context = new DataContext()) { ... }
...
using(DataContext context = new DataContext()) { ... }
...
}
catch (Exception exception)
{
...
using(DataContext context = new DataContext()) { ... }
...
}
}
Run Code Online (Sandbox Code Playgroud)
但是,有时会抛出异常并将其捕获.当前事务被回滚(并且由于它没有明确地实现,我假设,不完全确定,它是由NServiceBus本身完成的,因为写入数据库的所有结果都消失了,包括catch语句中的结果) .
目前,我正在通过写一个文件来解决它,当一些可怕的事情发生但我也喜欢将它存储在数据库中.
所以,最终,我想防止最后一个操作,即catch语句中的操作被回滚.可以这样做,如果是这样的话怎么样?
在表中,每次添加行时都会有一个标识列递增1(最低值为1).现在,有一个新的要求 - 我们需要实现软删除.
所以,我的想法是基本上将任何轻微删除的行乘以-1.这确保了唯一性,并清楚地在活动和轻微删除的项目之间划了一条线.
update Things set Id = -101
where Id = 101
Run Code Online (Sandbox Code Playgroud)
你知道吗,这台愚蠢的电脑让我不这么做.建议的解决方法是:
对我来说,这似乎是一个Q&D.但是,我能看到的唯一选择是添加一个带有删除状态的新列.
我正在使用EF来执行额外的工作,当我更改身份的值并存储它时,软件非常友好地为我思考并实际创建一个新行(具有增量设置的身份,既不是原始的,也不是消极的).
我该如何解决这个问题?
我已经阅读了很多关于这个问题的帖子,但是我不能在我的要求下使它正常工作。我的数字可能会出现逻辑故障,或者我错过了一些关键细节,但我看不到。
我得到的是一个滚动条,但它似乎没有激活。我的猜测是,由于存在标记,网格将整体呈现,从而使滚动画面变得不必要。我如何才能感到别样?
我希望创建一个显示较长数据网格的窗口,该网格是:
XAML
<Window ...
SizeToContent="Width"
Height="600"
ResizeMode="NoResize">
<StackPanel>
<StackPanel Orientation="Horizontal">
<Button Content="Aaa" Click="Aaa_OnClick" />
<Button Content="Bbb" Click="Bbb_OnClick" />
</StackPanel>
<DataGrid ItemsSource="{Binding Things}"
VerticalScrollBarVisibility="Visible"
AutoGenerateColumns="False">
<DataGrid.Columns>
<DataGridTextColumn Header="Id"
Width="30"
Binding="{Binding Path=Id}" />
<DataGridTextColumn Header="Name"
Width="150"
Binding="{Binding Path=Name}" />
</DataGrid.Columns>
</DataGrid>
</StackPanel>
</Window>
Run Code Online (Sandbox Code Playgroud)
我想念什么?
c# ×7
.net ×2
wpf ×2
xaml ×2
arrays ×1
collections ×1
datagrid ×1
expander ×1
identity ×1
immutability ×1
layout ×1
linq ×1
msdn ×1
msmq ×1
nservicebus ×1
scrollbar ×1
sql ×1
transactions ×1
version ×1
winforms ×1