如何用前导零填充我的整数变量.就像我有一个值为20的整数abc,但我希望它是'0000020'.
码:
quarterlyReportDataCMMS.QRTrailerRecord.FileRecordCount = Convert.ToInt32(refEligibleClaimants.Count);
Run Code Online (Sandbox Code Playgroud) 我听说它是构建WPF UI的下一个最好的东西,但是所有现有的例子都有几十行代码 - 我可以获得一个MVVM的Hello World,它可以毫不含糊地解释它的全部内容吗?我对C#/ .net也很新,所以也许指点一些可能有用的资源?
非常感激!
如果我GZip这个文字:
你好,世界
通过C#使用此代码:
Stream stream = new MemoryStream(Encoding.Default.GetBytes("Hello World"));
var compressedMemoryStream = new MemoryStream();
using (var gzipStream = new GZipStream(compressedMemoryStream, CompressionMode.Compress))
{
stream.CopyTo(gzipStream);
gzipStream.Close();
}
Run Code Online (Sandbox Code Playgroud)
结果流长133个字节
通过Fiddler Utilities.GzipCompress或此PHP页面运行相同的字符串,结果只有31个字节长.
在这两种情况下,输入都是11个字节,所以我认为PHP结果是正确的,但显然这意味着我无法从.NET内解压缩PHP zip,反之亦然.为什么.NET输出这么大?
实际上事实证明,尽管PHP和Fiddler的结果长度相同,但它们并不相同.我可以在.NET中解压缩PHP版本,但不能解压缩Fiddler版本.PHP页面解压缩这三个,所以看起来Fiddler和.NET的gzip实现之间可能存在不兼容性.
按照要求,我上传的三个输出到收存箱这里.
这些是这些文件的原始hexdump(不确定它们是否真的像这样使用,但我认为它表明fiddler和PHP版本之间的区别在于标题,而不是压缩数据本身):
小提琴手:
0000-0010: 1f 8b 08 00-c2 e6 ff 4f-00 ff f3 48-cd c9 c9 57 .......O ...H...W
0000-001f: 08 cf 2f ca-49 01 00 56-b1 17 4a 0b-00 00 00 ../.I..V ..J....
Run Code Online (Sandbox Code Playgroud)
PHP:
0000-0010: 1f 8b 08 00-00 00 00 00-00 03 …Run Code Online (Sandbox Code Playgroud) 我刚刚编写了一个由多个线程同时调用的方法,我需要跟踪所有线程何时完成.代码使用此模式:
private void RunReport()
{
_reportsRunning++;
try
{
//code to run the report
}
finally
{
_reportsRunning--;
}
}
Run Code Online (Sandbox Code Playgroud)
这是代码中唯一_reportsRunning值被更改的地方,该方法需要大约一秒钟才能运行.
偶尔当我有超过六个左右的线程一起运行报告时,_reportsRunning的最终结果可以降到-1.如果我换到电话_runningReports++和_runningReports--一个锁,则行为似乎是正确的,一贯的.
所以,问题是:当我在C++中学习多线程时,我被教导你不需要同步调用递增和递减操作,因为它们总是一个汇编指令,因此线程不可能在中间切换-呼叫.我是否正确地教过,如果是这样的话,那对C#来说怎么回事?
我有一个错误:
错误2'int []'不包含'Contains'的定义,并且最好的扩展方法重载'System.Linq.Enumerable.Contains(System.Collections.Generic.IEnumerable,TSource)'有一些无效的参数
这是我的代码:
public partial class mymymy : System.Web.UI.Page
{
int[] validType = { 2, 3, 4, 5, 6, 8, 13, 14, 16, 22 };
protected void Page_Load(object sender, EventArgs e)
{
}
protected void LinqDataSource_Selecting(object sender, LinqDataSourceSelectEventArgs e)
{
using (var dc = new soxMainDataContext())
{
var qry = from item in dc.LeaveRequests
where **validType**.Contains(item.Type)
&& item.MgtApproval == null
select item;
e.Result = qry;
}
}
}
Run Code Online (Sandbox Code Playgroud) 简短甜美的版本:
在大约一百台测试机器中的一台机器上,decimal.TryParse()将"1.01"转换为0.01
好吧,这听起来很疯狂,但请耐心等待......
我们有一个通过JSON与Web服务通信的客户端应用程序,该服务返回一个十进制值作为字符串,因此我们将它作为字符串存储在我们的模型对象中:
[DataMember(Name = "value")]
public string Value { get; set; }
Run Code Online (Sandbox Code Playgroud)
当我们在屏幕上显示该值时,它被格式化为特定的小数位数.所以我们使用的过程是字符串 - >十进制,然后十进制 - >字符串.
该应用程序目前正在进行最终测试,并在100多台机器上运行,这一切都运行良好.但是在一台机器上如果十进制值的前导'1'则将其替换为零.我在代码中添加了简单的日志记录,因此它看起来像这样:
Log("Original string value: {0}", value);
decimal val;
if (decimal.TryParse(value, out val))
{
Log("Parsed decimal value: {0}", val);
string output = val.ToString(format, CultureInfo.InvariantCulture.NumberFormat);
Log("Formatted string value: {0}", output);
return output;
}
Run Code Online (Sandbox Code Playgroud)
在我的机器上 - 任何其他客户端机器 - 日志文件输出是:
- 原始字符串值:1.010000
- 经验证的十进制值:1.010000
- 格式化字符串值:1.01
在有缺陷的机器上输出是:
- 原始字符串值:1.010000
- 经解析的十进制值:0.010000
- 格式化字符串值:0.01
所以看起来decimal.TryParse方法有问题.
我们尝试过的事情:
有没有人见过这样的东西或有任何建议?我很快就没有想法......
当我输入这个时,会有更多信息传入:将字符串值"10000"传递给Convert.ToInt32()会返回0,所以这似乎也会丢掉前导1.
基于评论的进一步测试:
我最近一直在研究大型代码库,重构并通常改进设计以增加覆盖范围.此外,在相当多的文件中,我删除了多余的使用语句,移动了方法,以便类似的功能靠得很近,添加了区域等,但实际上没有改变文件中代码的功能.
与此同时,在团队的其他地方,其他开发人员正在修复错误并改变代码行.显然,当涉及到合并时,这可能是一个问题,因为行号不再匹配,方法可能已经移动.
现在,我理解一般规则,在源控制环境中移动方法可能是危险的,我们认为这个好处超过了成本.然而,我不明白为什么它应该是这样的.
假设我的初始文件是一个简单的计算器:
public class Calculator
{
public int Subtract(int a, int b)
{
return a + b;
}
public int Add(int a, int b)
{
return a + b;
}
}
Run Code Online (Sandbox Code Playgroud)
我决定我希望这些方法按字母顺序排列:
public class Calculator
{
public int Add(int a, int b)
{
return a + b;
}
public int Subtract(int a, int b)
{
return a + b;
}
}
Run Code Online (Sandbox Code Playgroud)
而另一位开发人员修复了减法方法中的错误
public class Calculator
{
public int Subtract(int a, int b)
{
return a - b;
} …Run Code Online (Sandbox Code Playgroud) 我的应用程序中有一个按钮,它与命令绑定.此按钮位于另一个控件内,该控件也会对鼠标点击做出反应.当按钮启用时,我得到了我期望的行为 - 单击按钮并触发命令,单击按钮外部但在容器控件内部,而是触发.
不幸的是,当按钮被禁用时(通过命令的CanExecute方法),按钮上的点击会冒泡到容器控件.我不想要这个,我想要吞下点击 - 既不会触发命令也不会冒泡.
我试图通过创建一个继承自Button的新类来克服这个问题,但是以下方法似乎都没有在禁用按钮上调用:
WPF路由事件系统是否完全忽略了禁用的控件?如果是这样,那么我可以得到我正在寻找的行为?
我一直在尝试在最后一个小时左右将可下载的.NET源代码安装到我的本地机器上,它似乎已被破坏.
我从这里安装.NET v8.0文件,安装完成后会创建以下文件:
-Readme.txt -(Source) --(DotNET) ---(8.0) ----source.zip.tmp -(Symbols) --pingme.txt --(000Admin) ---0000000001 ---history.txt ---lastid.txt ---server.txt
我无法想象这是对的 - 是吗?我原以为至少会有一些pdb文件...它肯定似乎不起作用.
一个小小的研究拉起了这个链接,那个人说它与日期格式有关.我真的不想像他那样重写安装程序,但我尝试将我的区域设置为英语 - 美国(来自英国)并自定义日期格式都没有成功.如果这是问题,我本来希望找到更多的参考.
所以,我的问题是:
奖金问题:
作为参考,我在XP上运行Visual Studio 2008,并应用了所有服务包和补丁.
我正在尝试编写一个需要使用剪贴板来实现某些功能的小应用程序.由于我不想覆盖当前在剪贴板中的用户数据,我决定将其保存到内存中,完成我的工作然后将其写回.下面的代码是一个控制台应用程序,它是我正在尝试做的准系统示例.
我遇到的问题是恢复状态.如果我在运行应用程序之前从Visual Studio将某些内容复制到剪贴板,则剪贴板中总共有六个对象(各种字符串格式和一个区域设置)都将放入缓存中.一旦我恢复它们,虽然只有区域设置在剪贴板中,并且每次调用SetData()都会覆盖最后一个.(顺便说一句,SetDataObject似乎不是GetDataObject的反转,所以我不能只使用它)
我有什么想法可以存储剪贴板状态并在以后恢复它?
[STAThread]
static void Main(string[] args)
{
//Store the old clipboard data
Dictionary<string, object> clipboardCache = new Dictionary<string, object>();
IDataObject clipboardData = Clipboard.GetDataObject();
foreach (string format in clipboardData.GetFormats())
{
clipboardCache.Add(format, clipboardData.GetData(format));
}
Clipboard.SetText("Hello world!");
string value = Clipboard.GetText();
Console.WriteLine(value);
//Clear the clipboard again and restore old data
Clipboard.Clear();
foreach (KeyValuePair<string, object> valuePair in clipboardCache)
{
Clipboard.SetData(valuePair.Key, valuePair.Value);
Thread.Sleep(100);
}
Console.ReadLine();
}
Run Code Online (Sandbox Code Playgroud) 抱歉,如果这最终成为一个愚蠢的问题,但我只是想知道为什么这是在Notepad练习1教程的第9步(http://developer.android.com/resources/tutorials/notepad/notepad-ex1.html)完成的)...
public static final int INSERT_ID = Menu.FIRST;
Run Code Online (Sandbox Code Playgroud)
...然后INSERT_ID在任何地方使用,而不是Menu.FIRST直接在所有地方使用?
我以为我不想创建任何新变量,如果我不需要,特别是当它们已经是静态最终时.
创建起来很昂贵INSERT_ID吗?
我刚刚在这里回答了一个问题,我说在两者之间没有功能差异
{Binding TargetProperty}
Run Code Online (Sandbox Code Playgroud)
和
{Binding Path=TargetProperty}
Run Code Online (Sandbox Code Playgroud)
而且,据我所知,我所写的内容基本上是正确的.然而,一个人将使用构造函数和另一个设置属性的想法让我觉得可能存在差异,所以我鞭打开放反射器并看了一眼.
构造函数中包含以下代码:
public Binding(string path)
{
this._source = UnsetSource;
if (path != null)
{
if (Dispatcher.CurrentDispatcher == null)
{
throw new InvalidOperationException();
}
this._ppath = new PropertyPath(path, new object[0]);
this._attachedPropertiesInPath = -1;
}
}
Run Code Online (Sandbox Code Playgroud)
path属性是这样的:
public PropertyPath Path
{
get
{
return this._ppath;
}
set
{
base.CheckSealed();
this._ppath = value;
this._attachedPropertiesInPath = -1;
base.ClearFlag(BindingBase.BindingFlags.PathGeneratedInternally);
}
}
Run Code Online (Sandbox Code Playgroud)
因此,当您通过属性设置路径时,将清除PathGeneratedInternally标志.现在,这个标志没有公开直接暴露在任何地方,但似乎确实在几个地方使用:
internal void UsePath(PropertyPath path)
{
this._ppath = path;
base.SetFlag(BindingBase.BindingFlags.PathGeneratedInternally);
}
[EditorBrowsable(EditorBrowsableState.Never)]
public bool …Run Code Online (Sandbox Code Playgroud)