天道酬勤,学无止境

c#

System.TypeLoadException: Could not load type 'Npgsql.NpgsqlConnection'

问题 我有一个项目,我正在尝试用 mono 编译以在 ubuntu 上运行。 在 Windows 上运行良好,使用xbuild编译单声道工作正常,但是当我尝试从服务器运行它时,出现以下错误: System.TypeLoadException: Could not load type 'Npgsql.NpgsqlConnection' from assembly 'Npgsql, Version=3.2.1.0, Culture=neutral, PublicKeyToken=5d8b90d52f46fda7'. 在 NpgsqlConnection _connection = new NpgsqlConnection(); Npgsql 版本 3.2.1.0 存在,所以我不确定为什么会出现这个错误。 我执行以下步骤 Mono x86 cmd > xbuild /p:Configuration=Release D:\Dropbox\MonoServer\MonoServer.csproj 将所有文件传输到服务器 mono MonoServer.exe 我还必须手动将System.Data传输到服务器,因为由于某种原因不包括在内,并且会导致: System.IO.FileNotFoundException: Could not load file or assembly or one

2022-07-11 09:58:05    分类:技术分享    c#   .net   mono

Nullcheck before int.TryParse [closed]

问题 关闭。 这个问题是基于意见的。 它目前不接受答案。 想改进这个问题? 更新问题,以便可以通过编辑这篇文章用事实和引用来回答它。 5年前关闭。 改进这个问题 我有许多字符串被解析为整数值的代码。 string item = null; //or a value int result; if (!string.IsNullOrEmpty(item) && int.TryParse(item, out result)) { //do stuff } 真的需要每次都检查IsNullOrEmpty吗? 如果它为null或为空,则解析应该失败。 回答1 不, String.IsNullOrEmpty在这里是多余的,因为 Int32.TryParse 通过返回false来处理这种情况。 所以这更简洁: int result; if (int.TryParse(item, out result)) { //do stuff } MSDN: 如果 s 参数为 null 或 String.Empty、格式不正确或表示小于 MinValue 或大于 MaxValue 的数字,则转换失败。 回答2 string item = null; //or a value int result; if (int.TryParse(item, out result)) { //do stuff } 回答3

2022-07-11 09:57:31    分类:技术分享    c#   int

Valid GUID string gives Invalid cast from 'System.String' to 'System.Guid'

问题 我正在运行以下代码: var guidStr = "C105534D-E001-46F1-874A-322E5E0E132C"; var guid1 = Guid.Parse(guidStr); var guid2 = Convert.ChangeType(guidStr, typeof(Guid)); Console.WriteLine(guid1 + " " + guid2); 虽然guid1得到一个值就好了, guid2行抛出一个异常: Invalid cast from 'System.String' to 'System.Guid'. at System.Convert.DefaultToType(IConvertible value, Type targetType, IFormatProvider provider) at System.String.System.IConvertible.ToType(Type type, IFormatProvider provider) at System.Convert.ChangeType(Object value, Type conversionType, IFormatProvider provider) at System.Convert.ChangeType(Object value, Type

2022-07-11 09:55:10    分类:技术分享    c#   guid   typeconverter   iconvertible   changetype

C# String Replace safely

问题 您对如何安全地替换字符串有任何想法或提示吗? 例子: string Example = "OK OR LOK"; 现在我想用 true 替换“OK”,用 false 替换“LOK”。 Example = Example.Replace("OK", "true"); Example = Example.Replace("LOK", "false"); 现在结果是: Example = "true or Ltrue"; 结果应该是: Example ="true or false"; 我理解这个问题,但我不知道如何解决这个问题。 谢谢 回答1 你可以先用这个方法替换最长的字符串,fe: public static string ReplaceSafe(string str, IEnumerable<KeyValuePair<string, string>> replaceAllOfThis) { foreach (var kv in replaceAllOfThis.OrderByDescending(kv => kv.Key.Length)) { str = str.Replace(kv.Key, kv.Value); } return str; } 你的例子: Example = ReplaceSafe(Example, new[] {new KeyValuePair

2022-07-11 09:54:17    分类:技术分享    c#   string   replace

JSON .NET Custom Name Resolver for Sub-Properties

问题 我有一个 API,它从 MongoDB 返回一个 JSON 对象,其中一个属性是“开放式”文档,这意味着它可以是该属性的任何有效 JSON。 我不知道这些属性的名称是什么,它们可以是任何字符串。 我只知道这个特定的属性需要被序列化,它是如何存储在数据库中的。 因此,如果最初存储的属性名称是“Someproperty”,则 JSON 中的序列化响应需要是“Someproperty”,而不是“someProperty”。 我们有这样的配置: ContractResolver = new CamelCasePropertyNamesContractResolver(); 在我们的 CustomJsonSerializer 中,但是在返回“开放式”JSON 时会弄乱响应的格式。 实际上,我们希望响应与它们在 MongoDB (BSON) 中的存储方式完全相同,但所有这些属性都是驼峰式的。 我知道这些值在通过数据库存储/检索时保持它们的大小写,所以这不是问题。 我如何告诉 JSON.net 从本质上绕过特定数据点的所有子属性的 CamelCasePropertyNameResolver? 编辑:只是为了提供更多信息,并分享我已经尝试过的内容: 我想过像这样覆盖 PropertyNameResolver: protected override string

2022-07-11 09:53:26    分类:技术分享    c#   json   mongodb   json.net

Easy way to Print Values of a dictionary?

问题 我有以下代码: static void Main(string[] args) { // Add 5 Employees to a Dictionary. var Employees = new Dictionary<int, Employee>(); Employees.Add(1, new Employee(1, "John")); Employees.Add(2, new Employee(2, "Henry")); Employees.Add(3, new Employee(3, "Jason")); Employees.Add(4, new Employee(4, "Ron")); Employees.Add(5, new Employee(5, "Yan")); } 有没有一种简单的方法可以像在 Java 中那样以简单的方式打印字典的值? 例如,我希望能够打印如下内容: 键为 1 的员工:Id=1,Name=John 键为 2 的员工:Id=2,Name=Henry .. ETC.. 谢谢你。 对不起,我习惯了 Java! 回答1 foreach(var pair in Employees) { Console.WriteLine($"Employee with key {pair.Key}: Id={pair.Value.Id} Name={pair.Value

2022-07-11 09:53:07    分类:技术分享    c#   dictionary

c# await task - local variables being changed unexpectedly

问题 我刚刚开始在我正在编写的一些方法中实现异步编程。 业务逻辑是接受入站调用,如果项目不在全局缓存中,则处理它,或者如果它是,则只需更新将在稍后在代码中处理的条目。 但是,我看到一些我无法理解的奇怪行为。 我的单元测试向我的 QueueProcessor 方法提交了两个请求(每次调用之间有 2 秒的延迟)。 为了测试,我有目的地在另一个方法中使用了 task.delay,QueueProcessor 在处理请求时将调用该方法。 这模拟了一个真实世界的测试用例,我们在处理第一个请求时阻止了其他请求。 我在名为 ProcessRoutine 的子方法范围内使用了一个局部变量。 但是由于某些原因,当第二次调用更新全局缓存时,仅在 ProcessRoutine 方法范围内的局部变量也发生了变化。 此外,第二个请求将仅执行更新全局缓存变量然后停止的操作逻辑。 所以没有其他代码被触发。 我已经通过我的日志确认了这一点。 我只是不明白为什么 ProessRoutine 方法中传递的数据集可以通过这种方式进行更改。 public async Task<bool> QueueProcessor(RtcPluginModel_IncidentModel passInModel) { //Ensure the processing cache is instantiated if

2022-07-11 09:46:15    分类:技术分享    c#   asp.net   asynchronous   asp.net-web-api

How to remove DateTime.Parse dependency on System.Threading.Thread.CurrentThread.CurrentCulture

问题 考虑以下代码: class Program { static void Main(string[] args) { try { System.Threading.Thread.CurrentThread.CurrentCulture = new CultureInfo("fo-FO"); var s = DateTime.MaxValue.ToString("yyyy-MM-ddTHH:mm:ssZ"); var d = DateTime.Parse(s, CultureInfo.InvariantCulture); Console.WriteLine("Was able to parse with fo-FO"); } catch (Exception e) { Console.WriteLine("Exception: {0}", e); } try { System.Threading.Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US"); var s = DateTime.MaxValue.ToString("yyyy-MM-ddTHH:mm:ssZ"); var d = DateTime.Parse(s, CultureInfo.InvariantCulture); Console

2022-07-11 09:46:11    分类:技术分享    c#   .net   datetime

Cannot implicitly convert type 'System.Linq.IQueryable<Model>' to 'Model'

问题 我有一个操作结果,用于从我的视图模型中填充一个 IQueryable 字段和一个 IEnumerable 字段。 我可以填充其中一个,但不能同时填充两个,因为我遇到了这个错误。 我需要填充这两个字段,然后将它们传递给视图。 谁能帮我解决这个错误? 查看型号: public class AdminReviewViewModel { public IEnumerable<Review> Reviews { get; set; } public IQueryable Clients { get; set; } public int ClientID { get; set; } public int ReviewID {get; set;} public string ReviewName { get; set; } public int? ReviewPeriodID { get; set; } public string ReviewPeriodName { get; set; } } 控制器: public ActionResult Review() { AdminReviewViewModel model = new AdminReviewViewModel(); model.Clients = clientRepo.Clients; var reviews =

2022-07-11 09:45:12    分类:技术分享    c#

Populate list of Drives Available for Mapping

问题 回答1 以下部分将为您提供可用于映射的驱动器号列表 Enumerable.Range('A', 'Z' - 'A' + 1).Select(i => (Char)i +":") .Except(DriveInfo.GetDrives().Select(s=>s.Name.Replace("\\",""))) 下面的部分返回使用驱动器的列表。 DriveInfo.GetDrives().Select(s=>s.Name.Replace("\\","")) 回答2 鉴于(可用的)驱动器号只是字母表中的所有字母,你能不能只做这样的事情: public char[] getAvailableDriveLetters() { List<char> availableDriveLetters = new List<char>() { 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z' }; DriveInfo[] drives = DriveInfo.GetDrives(); for (int i = 0; i < drives.Length; i++) {

2022-07-11 09:42:09    分类:技术分享    c#   mapped-drive