我觉得这是一个转贴,但我似乎无法找到任何关于它的好信息.我只是想知道序列化实际上是如何工作的(实际上是反序列化).我想知道的是,如果说我有一个实际上没有私人领域支持的财产; 即:
public string SomeProp {
get {
return GetValue("SomePropKey");
}
set{
SetValue("SomePropKey", value);
}
}
Run Code Online (Sandbox Code Playgroud)
当我反序列化时,setter会被调用吗?getter在序列化时被调用,因为当我序列化对象时,正确的值被写入输出流.我知道这似乎是一种奇怪的情况,但究竟发生了什么?或者我只是让这复杂化....
在项目设置中,在"调试"选项卡上,有没有办法在命令行参数框中使用项目宏变量?
我知道你不能直接使用它们因为它们没有扩展但是有一个聪明的解决方案吗?
编辑:我正在使用C#项目.
我有一个自定义游标适配器,我试图设置其中一个行视图的文本框的颜色:
txtChange.setTextColor(0xE01B4C);
txtChange.setText("Hey I'm some Text!");
Run Code Online (Sandbox Code Playgroud)
如果我删除了setTextColor呼叫,则文本按预期显示.我错过了什么?
有没有更优雅的方式这样做?
[Flags]
public enum SomeFlaggedEnum
{
Value1 = 1,
Value2 = 2,
Value3 = 4
}
private SomeFlaggedEnum _myFlags;
public bool EnabledValue1
{
set
{
if (value)
{
_myFlags |= SomeFlaggedEnum.Value1;
}
else
{
_myFlags &= ~SomeFlaggedEnum.Value1;
}
}
}
Run Code Online (Sandbox Code Playgroud)
我知道可能有一个简单的答案,我只是想一想......
编辑:如其中一个答案所指出的,枚举是不正确的.这只是在这个例子中,而不是在实际的代码中.
有没有人知道一种简单的方法来比较两个字符串,以产生两者之间的"差异"?(在一个数值)我一直在抓住谷歌运气不好.在做了一些编码后,它并不像我想象的那么简单.有线索吗?
我将一堆项目移动到解决方案文件夹,将项目列表切换为可管理的文件夹,现在每个文件夹项目都不按字母顺序排列.这只发生在我自己以外的机器上.任何想法如何缓解这个?
如何在其运算符时创建一个对象,例如:
operator > (Object obj1, Object obj2)
operator < (Object obj1, Object obj2)
Run Code Online (Sandbox Code Playgroud)
,被覆盖PowerShell使用这些运算符?
这样:
where-object { $CustomObject -gt 12 }
Run Code Online (Sandbox Code Playgroud)
会打电话:
public static bool operator > (Object object1, Object object2)
Run Code Online (Sandbox Code Playgroud)
可能吗?
澄清:
关注这篇文章:链接文本我正在尝试创建一个引用属性属性的表达式树.我的代码看起来像这样:
public interface IFoo
{
void X {get;set;}
}
public interface IBar : IFoo
{
void Y {get;set;}
}
public interface IFooBarContainer
{
IBar Bar {get;set;}
}
public class Filterer
{
//Where T = "IFooBarContainer"
public IQueryable<T> Filter<T>(IEnumerable<T> collection)
{
var argument = Expression.Parameter(typeof (T), "item");
//...
//where propertyName = "IBar.X";
PropertyOfProperty(argument, propertyName);
}
private static MemberExpression PropertyOfProperty(Expression expr, string propertyName)
{
return propertyName.Split('.').Aggregate<string, MemberExpression>(null, (current, property) => Expression.Property(current ?? expr, property));
}
}
Run Code Online (Sandbox Code Playgroud)
我收到例外:
System.ArgumentException:没有为类型'IBar'定义实例属性'X'
ReSharper将上面链接中的代码转换为我的示例中的精简语句.这两种形式的方法都返回相同的错误.
如果我引用 …
我正在开发一个二进制PowerShell模块.我已经设置了模块项目的调试选项卡,以启动PowerShell控制台并导入我的模块.如果按F5,它会按预期执行.
我遇到的问题是Visual Studio并没有真正"附加"到该过程.模块窗口为空,没有任何断点被击中.
如果我手动启动PowerShell并附加到进程... BOOM!我可以调试.
F5ing会比Build + Launch + Attach一遍又一遍地更好:|
有任何想法吗?
编辑:
我发现,如果我启用非托管代码调试,我将看到加载的模块.这是有道理的,因为PowerShell.exe是不受管理的.现在的问题是,在模块窗口中,我的所有程序集符号状态都是"符号文件中没有本机符号".进程"powershell.exe"是"Native"而不是"Managed(v2.0.50727)".看起来VS决定本机调试而不是托管模式.有什么方法可以改变吗?
谈到SQL,我是新手.使用如下参数创建存储过程时:
@executed bit,
@failure bit,
@success bit,
@testID int,
@time float = 0,
@name varchar(200) = '',
@description varchar(200) = '',
@executionDateTime nvarchar(max) = '',
@message nvarchar(max) = ''
Run Code Online (Sandbox Code Playgroud)
这是T-SQL中默认值的正确形式?我试图使用NULL而不是''.
当我试图通过C#执行此过程时,我得到一个错误,指的是描述是预期但未提供的事实.当这样称呼时:
cmd.Parameters["@description"].Value = result.Description;
Run Code Online (Sandbox Code Playgroud)
result.Description为null.在SQL中,这不应该默认为NULL(在我的情况下是'')
这是调用命令:
cmd.CommandText = "EXEC [dbo].insert_test_result @executed,
@failure, @success, @testID, @time, @name,
@description, @executionDateTime, @message;";
...
cmd.Parameters.Add("@description", SqlDbType.VarChar);
cmd.Parameters.Add("@executionDateTime", SqlDbType.VarChar);
cmd.Parameters.Add("@message", SqlDbType.VarChar);
cmd.Parameters["@name"].Value = result.Name;
cmd.Parameters["@description"].Value = result.Description;
...
try
{
connection.Open();
cmd.ExecuteNonQuery();
}
...
finally
{
connection.Close();
}
Run Code Online (Sandbox Code Playgroud) .net ×3
c# ×3
powershell ×2
alphabetized ×1
android ×1
binary ×1
comparison ×1
debugging ×1
enums ×1
flags ×1
linq ×1
properties ×1
sdk ×1
solution ×1
sql ×1
sql-server ×1
string ×1
t-sql ×1