我正在寻找的是如何读取用户从命令行(控制台项目)给出的整数.我主要了解C++并且已经开始了C#路径.我知道Console.ReadLine(); 只接受一个字符串/字符串.所以总之我正在寻找这个的整数版本.
只是为了让你了解我正在做的事情:
Console.WriteLine("1. Add account.");
Console.WriteLine("Enter choice: ");
Console.ReadLine(); // Needs to take in int rather than string or char.
Run Code Online (Sandbox Code Playgroud)
我一直在寻找这个.我在C上找到了很多但不是C#.我确实在另一个网站上找到了一个建议从char转换为int的线程.我确信必须有比转换更直接的方式.
今天我的申请今天投了一个OutOfMemoryException.对我来说,这几乎是不可能的,因为我有4GB的RAM和大量的虚拟内存.当我尝试将现有集合添加到新列表时发生错误.
List<Vehicle> vList = new List<Vehicle>(selectedVehicles);
Run Code Online (Sandbox Code Playgroud)
根据我的理解,这里分配的内存不多,因为我的新列表应该包含的车辆已经存在于内存中.我不得不承认这Vehicle是一个非常复杂的课程,我试图一次性将大约50.000个项目添加到新列表中.但是由于Vehicle应用程序中的所有内容都来自一个只有200MB大小的数据库:我不知道OutOfMemoryException在这一点上可能会导致什么.
我正在使用TFS 2012 Build并遇到错误
拒绝访问该路径
正在构建的解决方案包含大约15个项目,其中一些项目正在使用Castle.Components.Validator.2.5.0程序集.
我已经看过其他帖子谈论TFS Build Access Denied错误,但它们通常指的是同时构建运行.在这种情况下,一次只运行一个构建.此外,重新启动服务器或构建尚未运行一段时间时会发生错误.
一旦构建运行并失败,下一个构建成功,并且每个构建成功后再次成功,直到构建尚未运行一段时间或服务器重新启动.虽然我们可以解决这个问题,但这是一个手动头痛的问题.
这是错误:
C:\ WINDOWS\Microsoft.NET\Framework64\v4.0.30319\Microsoft.Common.targets(3513):无法复制文件"D:\ Builds\12\Foo\Check-In Build\Sources\packages\Castle.Components .Validator.2.5.0\lib\NET40\Castle.Components.Validator.dll"to"D:\ Builds\12\Foo\Check-In Build\Binaries\Castle.Components.Validator.dll".
访问路径'D:\ Builds\12\Foo\Check-In Build\Binaries\Castle.Components.Validator.dll'被拒绝.
查看日志文件时,您可以看到构建正在尝试将文件复制两次.因为第一个锁定文件,第二个失败,因此构建失败.以下是日志文件的片段,其中显示了正在发生的事情:
2> _CopyFilesMarkedCopyLocal:将文件从"D:\ Builds\12\Foo\Check-In Build\Sources\packages\Castle.Components.Validator.2.5.0\lib\NET40\Castle.Components.Validator.dll"复制到" D:\ Builds\12\Foo\Check-In Build\Binaries\Castle.Components.Validator.dll".
5> _CopyFilesMarkedCopyLocal:将文件从"D:\ Builds\12\Foo\Check-In Build\Sources\packages\Castle.Components.Validator.2.5.0\lib\NET40\Castle.Components.Validator.dll"复制到" D:\ Builds\12\Foo\Check-In Build\Binaries\Castle.Components.Validator.dll".
2> _CopyFilesMarkedCopyLocal:将文件从"D:\ Builds\12\Foo\Check-In Build\Sources\packages\MvcContrib.Mvc3.FluentHtml-ci.3.0.96.0\lib\MvcContrib.FluentHtml.dll"复制到"D:\Builds\12\Foo\Check-In Build\Binaries\MvcContrib.FluentHtml.dll".将文件从"D:\ Builds\12\Foo\Check-In Build\Sources\packages\RhinoMocks.3.6\lib\Rhino.Mocks.dll"复制到"D:\ Builds\12\Foo\Check-In Build \二进制文件\ Rhino.Mocks.dll".
任何有关如何解决这个问题的帮助将不胜感激.
在C#中,有没有办法在不调用其构造函数的情况下实例化类的实例?
假设该类是公共的,并在第三方库中定义,构造函数是内部的.我想这样做的原因很复杂,但知道是否有可能使用某种C#hackery会很有帮助.
注意:我特别不想调用任何构造函数,因此使用反射访问内部构造函数不是一个选项.
.NET中是否有可用的助手类来构建Url?
例如,如果用户输入字符串:
stackoverflow.com
Run Code Online (Sandbox Code Playgroud)
我试着把它传递给HttpWebRequest:
WebRequest.CreateHttp(url);
Run Code Online (Sandbox Code Playgroud)
它将失败,因为它不是有效的URL(它没有前缀).
我想要的是能够解析用户输入的部分网址:
Uri uri = new Uri(url);
Run Code Online (Sandbox Code Playgroud)
然后修复缺失的部分:
if (uri.Port == 0)
uri.Port = 3333;
if (uri.Scheme == "")
uri.Scheme = "https";
Run Code Online (Sandbox Code Playgroud)
.NET是否有任何可用于解析和操作Uri的类?
用户输入的值(例如stackoverflow.com:3333)有效; 我只需要一个班级来分开它.我尝试使用这个UriBuilder类:
UriBuilder uriBuilder = new UriBuilder("stackoverflow.com:3333");
Run Code Online (Sandbox Code Playgroud)
不幸的是,UriBuilder类无法处理URI:
3333-1stackoverflow.com所以我需要一个能够理解的课程,host:port尤其是当课程不是特别http重要时,尤其如此.
控制台应用.
一些需要解析的URL示例:
server:8088 server:8088/func1server:8088/func1/SubFunc1http://serverhttp://server/func1http://server/func/SubFunc1http://server:8088http://server:8088/func1http://server:8088/func1/SubFunc1magnet://servermagnet://server/func1magnet://server/func/SubFunc1magnet://server:8088 …我将我的 Web 应用程序从 Visual Studio 2019 移至 2022(预览版 7),但我无法热重载,即使是很小的更改(例如更改if(a=b)为)if(a!=b)并且需要停止调试器,而且我不确定“COMPLUS_ForceENC”环境变量是什么,无法找不到任何关于它的东西。
当我创建新的 Web 应用程序时,热重载在 C# 和 cshtml 上运行得很好。
这是当我对原始应用程序进行任何更改时显示的错误:
错误 ENC2004:项目中所做的更改需要重新启动应用程序:当调试器已附加到已运行的进程时,不允许进行更改。考虑在启动进程之前设置“COMPLUS_ForceENC”环境变量。
我已经阅读了关于何时以及如何覆盖的10个不同的问题,GetHashCode但仍然有一些我不太了解的问题.大多数实现GetHashCode都是基于对象字段的哈希码,但是引用的是值的值GetHashCode永远不会在对象的生命周期内发生变化.如果它所基于的字段是可变的,那该怎么办?另外,如果我确实希望字典查找等基于引用相等而不是我的重写Equals?
我主要是Equals为了方便单元测试我的序列化代码,我假设序列化和反序列化(在我的情况下为XML)会导致引用相等,所以我想确保至少它的值是正确的.Equals在这种情况下,这种不良做法是否会被覆盖?基本上在大多数执行代码中,我希望引用相等,而且我总是使用,==而不是重写.我应该创建一个新的方法ValueEquals或什么而不是覆盖Equals?我曾经认为框架总是使用==而不是Equals比较事物,因此我认为覆盖是安全的,Equals因为在我看来,如果你想要有与==运算符不同的第二个等式定义,那么它的目的是什么.从阅读其他几个问题虽然看起来并非如此.
编辑:
看来我的意图不清楚,我的意思是99%的时候我想要普通的老参考平等,默认行为,没有惊喜.对于非常罕见的情况,我希望值相等,并且我希望通过使用.Equals而不是显式请求值相等==.
当我这样做时,编译器建议我也覆盖GetHashCode,这就是这个问题的出现方式.GetHashCode当应用于可变对象时,似乎存在矛盾的目标,即:
a.Equals(b)那时a.GetHashCode()应该== b.GetHashCode().a.GetHashCode()永远不应该改变的价值a.当一个可变对象时,这些看起来自然是矛盾的,因为如果对象的状态发生变化,我们期望值的.Equals()变化,这意味着GetHashCode应该改变以匹配变化.Equals(),但GetHashCode不应该改变.
为什么会出现这种矛盾呢?这些建议不适用于可变对象吗?可能是假设,但可能值得一提的是我指的是不是结构的类.
解析度:
我将JaredPar标记为已被接受,但主要用于评论互动.总结我从中学到的是,在边缘情况下实现所有目标和避免可能的古怪行为的唯一方法是仅覆盖Equals并GetHashCode基于不可变字段或实现IEquatable.这种类似似乎削弱了覆盖Equals引用类型的有用性,因为从我看到的大多数引用类型通常没有不可变字段,除非它们存储在关系数据库中以使用它们的主键来标识它们.
如果我使用ShellExecute(或在.net中System.Diagnostics.Process.Start())运行进程,则启动文件名进程不需要是完整路径.
如果我想开始记事本,我可以使用
Process.Start("notepad.exe");
Run Code Online (Sandbox Code Playgroud)
代替
Process.Start(@"c:\windows\system32\notepad.exe");
Run Code Online (Sandbox Code Playgroud)
因为direcotry c:\windows\system32是PATH环境变量的一部分.
如何在不执行进程且不解析PATH变量的情况下检查PATH上是否存在文件?
System.IO.File.Exists("notepad.exe"); // returns false
(new System.IO.FileInfo("notepad.exe")).Exists; // returns false
Run Code Online (Sandbox Code Playgroud)
但我需要这样的东西:
System.IO.File.ExistsOnPath("notepad.exe"); // should return true
Run Code Online (Sandbox Code Playgroud)
和
System.IO.File.GetFullPath("notepad.exe"); // (like unix which cmd) should return
// c:\windows\system32\notepad.exe
Run Code Online (Sandbox Code Playgroud)
是否有预定义的类可以在BCL中执行此任务?
c# ×8
.net ×4
build ×1
c#-4.0 ×1
equals ×1
file ×1
generics ×1
gethashcode ×1
hot-reload ×1
input ×1
overriding ×1
tfs ×1