Tag: c#

ValueTypes的动态表达式生成问题

我构建了一个框架,允许对表中的报表数据进行级联排序,具体取决于哪个列是主排序列。 它在很大程度上起作用,除了一个特定但重要的情况:当字段的属性是值类型时。 我收到以下错误消息: System.ArgumentException:类型’System.Int32’的表达式不能用于返回类型’System.Object’ 我知道这意味着我需要设置ValueType的值,但我不完全确定如何在这种特殊情况下。 根据一些研究和这个SO答案,我认为我需要以某种方式使用Expression.Convert 。 我的代码是生成表达式的代码。 generics类型参数T是数据“行”的类型。 GetFullSortOrder()只返回一个字符串数组,这些字符串表示类型T中也将进行排序的列(属性)的名称。 public IEnumerable<Expression<Func>> GetExpressions(string sortedColumn) where T : IReportRecord { var columns = GetFullSortOrder(sortedColumn) var typeParameter = Expression.Parameter(typeof(T)); foreach (var c in columns) { var propParameter = Expression.Property(typeParameter, c); yield return Expression.Lambda<Func>(propParameter, typeParameter); } } 当在T中选择的属性是ValueType时处理Expression.Lambda<Func>()时抛出exception。 属性框需要什么,或者在运行时才知道类型时返回正确的值?

C#字符串文件路径问题

我正在尝试为SoundPlayer对象设置文件路径 如果我的主项目文件夹中有一个声音文件夹。 我该如何发送 Soundplayer test = new Soundplayer(“Sounds/Fireball.wav”);

以编程方式取消选中datagridview中的checkboxcolumn

如何以编程方式取消选中datagridview中DataGridViewCheckboxColumn中的所有行? 我可以使用复选框获取正确的值 (bool)row.Cells[CheckBoxColumn.Index].FormattedValue 但那只是一个吸气剂。 我已经尝试使用设置单元格的值 (bool)row.Cells[CheckBoxColumn.Index].value = false 但这不会影响FormattedValue。 我怎么解决这个问题?

C#Reflection SetValue()找不到set accessor

我使用reflection来更新已对其进行更新并保存到mongodb的对象 private void updateSelf(MongoDoc newDoc) { Type type = this.GetType(); foreach (var i in type.GetProperties()) { if (i.GetCustomAttributes(false).Any(x => x is MongoDB.Bson.Serialization.Attributes.BsonIgnoreAttribute)) continue; Object oldValue = i.GetValue(this, null); Object newValue = i.GetValue(newDoc, null); if (!Object.Equals(oldValue, newValue) && !((oldValue == null) && (newValue == null))) { i.SetValue(this, newValue, null); } } } 这大部分工作,但i.SetValue(this, newValue, null); 尝试更新此属性时抛出exception: […]

是EntityFramework 6中的IDbCommandInterceptor线程是否安全

使用DbInterception add方法注册时,IDbCommandInterceptor实例是否被视为线程安全? 我已经实现了一个符合IDbCommandInterceptor接口的类,并且当调用其中一个执行方法与调用相应执行方法的停止时间相比时,它跟踪命令的开始时间。 我将这些信息存储在私人ivar列表中,需要知道我正在做的事情是否安全。

如何成功写入字节数?

我正在做一个项目,将代码从C ++转换为C#用于打印机。 我用C#中的SerialPort.Write()替换C ++中的WriteFile() 。 C# public void Write( byte[] buffer, int offset, int count ) C ++ BOOL WINAPI WriteFile( _In_ HANDLE hFile, _In_ LPCVOID lpBuffer, _In_ DWORD nNumberOfBytesToWrite, _Out_opt_ LPDWORD lpNumberOfBytesWritten, _Inout_opt_ LPOVERLAPPED lpOverlapped ); 在C ++中,我可以获得用lpNumberOfBytesWritten编写的字节数。 如何在C#中做同样的事情?

sqlite无法识别通用列表

在Windows商店应用程序项目中,我从Web服务获得一个JSON,如下所示: http : //paste2.org/jfMJ2AGA 我有这两个class public class media { public string id { get; set; } public string type { get; set; } public string image { get; set; } public string video { get; set; } public string snapshot { get; set; } public string url { get; set; } public string snapshot_url { […]

将分隔符添加到要显示的项目列表中

我有一个项目列表,我希望在C#中显示它们之间的分隔符。 使用普通的迭代器,我会在开头或结尾处添加一个额外的分隔符: string[] sa = {“one”, “two”, “three”, “four”}; string ns = “”; foreach(string s in sa) { ns += s + ” * “; } // ns has a trailing *: // one * two * three * four * 现在我可以使用for循环来解决这个问题: ns = “”; for(int i=0; i<sa.Length; i++) { ns += sa[i]; if(i != […]

绑定到ObservableCollection的列表框不会更新

我使用ObservableCollection来存储Windows的环境变量。 class VariableVieWModel { ObservableCollection vars; public ObservableCollection Variables { get { return vars; } set { vars = value; } } public VariableViewModel() { Reload(); } public void Reload() { // Code to retrieve vars } } 此ObservableCollection绑定到ListBox。 我在GUI中添加了一个按钮来重新加载变量,在点击时,它调用Reload()过程。 但是,ListBox内容不会更改,并且在调用Reload()时我无法再将项添加到列表中。 在构造函数下,一切正常。 ListBox XAML: 我尝试使用PropertyChanged作为UpdateSource触发器并设置大多数模式。 public void Reload() { vars = new ObservableCollection(); RegistryKey systemVarKey […]

Gridview EditItemTemplate DropDownList获取SelectedValue

在我的Gridview中,我有以下模板字段: <asp:DropDownList ID="ddlDeptCode" runat="server" SelectedValue='’ DataSource=” DataTextField=”DeptCode” DataValueField=”DeptCode” /> 当我在一行上单击“编辑”时,它会很好地工作,它会使用所有值填充DropDownList,并为该行选择正确的值。 但是,当我尝试更新行时: OnRowUpdating=”UpdateRow” protected void UpdateRow(object sender, GridViewUpdateEventArgs e) { GridViewRow row = UserGV.Rows[e.RowIndex]; DropDownList ddl = row.FindControl(“ddlDeptCode”) as DropDownList; string deptCode = ddl.SelectedValue; } 它找到DropDownList控件,但SelectedValue始终为空字符串。 我需要访问所选值以保存到数据库。 关于如何在代码中的Gridview中获取DropDownList的SelectedValue的任何想法? 编辑: 您还可以从后面的代码填充DropDownList和SelectedValue: protected void gv_RowDataBound(object sender, GridViewRowEventArgs e) { if (e.Row.RowType == DataControlRowType.DataRow) { if ((e.Row.RowState & DataControlRowState.Edit) […]