天道酬勤,学无止境

c#

继承或枚举(Inheritance or enum)

问题 我必须为应用程序构建新模型,我不知道什么更好: 使用继承或使用枚举作为对象类型: 例如 : 图书 class Book { public string Name {get;set;} public string Author {get;set;} public int NumberOfPages {get;set;} } public class Encyclopedie:Book { } public class Novel:Book { } 或更好地使用: class Book { public BookType Type {get;set;} public string Name {get;set;} public string Author {get;set;} public int NumberOfPages {get;set;} } public enum BookType { Encyclopedie = 0, Novel = 1, ... } 回答1 如果不同类型有显着差异(您如何处理和对待它们),请使用继承。 也就是说,如果你打算使用多态,你应该使用继承。 如果您只需要一种区分不同类型书籍的方法,请使用 Enum。 回答2 在真正的面向对象系统中,对象的类型对客户端是透明的。 所以处理书籍的代码不应该知道书籍的类型,而只调用书籍上的方法。 因此

2021-09-21 19:58:03    分类:技术分享    c#   inheritance   modeling

WPF ICommand CanExecute():RaiseCanExecuteChanged() 还是通过 DispatchTimer 自动处理?(WPF ICommand CanExecute(): RaiseCanExecuteChanged() or automatic handling via DispatchTimer?)

问题 我正在尝试确定使 ICommands 的 CanExecute() 反映在 UI 中的最佳方法。 我知道Dispatcher是处理 UI 绘图的 WPF(引擎?),并且默认情况下,Dispatcher 在实例化和活动用户界面(单击 UI 或键盘输入)时评估 ICommands 的 CanExecute() 方法。 显然,当任何给定 ICommand 上的 CanExecute() 更改时,这是一个问题,但既不提供鼠标输入也不提供键盘输入,因此 UI 不会更改以反映 ICommand CanExecute() 状态的更改。 这个问题似乎有两种解决方案,都包括调用 System.Windows.Input.CommandManager.InvalidateRequerySuggested()。 这会指示 Dispatcher 重新评估每个 ICommand 的 CanExecute() 并相应地更新 UI。 我也明白这可能有与性能相关的问题,但只有当一个人有很多 ICommands(1000+?)或者在他们的 CanExecute() 方法中执行他们不应该做的工作时,这似乎才是一个问题(对于例如,网络操作。) 假设有一个构造良好的 CanExecute() 方法,并且解决方案是调用 InvalidateRequerySuggested,那么我发现有两种方法可以这样做: 在您的

2021-09-21 19:54:17    分类:技术分享    c#   wpf   inotifypropertychanged   dispatcher   icommand

像素坐标到 3D 线 (opencv)(Pixel coordinates to 3D line (opencv))

问题 我在屏幕上显示了一个图像,该图像通过 cvInitUndistortMap 和 cvRemap(已完成相机校准)未失真,并且用户单击图像中的一个特征。 所以我有特征的 (u,v) 像素坐标,我也有内在矩阵和失真矩阵。 我正在寻找的是相机/真实世界坐标中 3D 线的方程,用户单击的特征必须位于该坐标上。 我已经有了相机图像平面和特征之间的垂直距离,所以我可以将它与上述方程结合起来,给出空间中特征的 (X,Y,Z) 坐标。 听起来很简单(逆内在矩阵之类的?)但我在任何地方都找不到分步说明。 首选 C++ 或 C# 代码。 回答1 这是一个有点老的问题,但仍然可能对某人有用。 所有的线都经过点 (0,0,0),所以: 线.x0 = 0; 线.y0 = 0; 线.z0 = 0; 方向向量如下: line.A = (u/fx) - (cx/fx); line.B = (v/fy) - (cy/fy); 线.C = 1; cx,cy,fx,fy 是来自相机矩阵的参数。 方程在“Learning OpenCv”一书中有解释。

2021-09-21 19:52:28    分类:技术分享    c#   c++   opencv   computer-vision   camera-calibration

如何在c#中将文件复制到字典[关闭](how can copy file to dictionary in c# [closed])

问题 很难说出这里问的是什么。 这个问题模棱两可、含糊不清、不完整、过于宽泛或言辞激烈,无法以目前的形式合理回答。 如需帮助澄清此问题以便重新打开它,请访问帮助中心。 11 年前关闭。 如何在c#中将文件复制到字典 回答1 好吧,您还没有指定文件格式。 如果它是“键值”,那么您可以执行以下操作: string[] lines = File.ReadAllLines("file.txt"); var dictionary = lines.Select(line => line.Split(' ')) .ToDictionary(bits => bits[0], bits => bits[1]); 我实际上并不喜欢一次读取所有行,请注意 - 文件小没问题,但文件大就不好。 编写一种一次读取一行的方法相当简单: public static IEnumerable<string> EnumerableLines(string file) { using (TextReader reader = File.OpenText(file)) { string line; while ((line = reader.ReadLine()) != null) { yield return line; } } } 您可以针对文本编码等进行调整。 现在查询变成: var dictionary =

2021-09-21 19:43:06    分类:技术分享    c#

ASP MVC ActionFilterAttribute OnActionExecuting 未触发(ASP MVC ActionFilterAttribute OnActionExecuting not fired)

问题 我有 2 个控制器Home public class HomeController : Controller { protected override void OnActionExecuting(ActionExecutingContext filterContext) { // do some irrelevant stuff base.OnActionExecuting(filterContext); } public ActionResult Index() { return View(); } } 和Service public ActionResult Confirm() { return RedirectToAction("Index", "Home");} 一个ActionFilterAttribute和OnActionExecuting方法 public class InvitationModeAttribute : ActionFilterAttribute { public override void OnActionExecuting(ActionExecutingContext filterContext) { // do some stuff base.OnActionExecuting(filterContext); } } public

2021-09-21 19:42:28    分类:技术分享    c#   asp.net   asp.net-mvc   redirecttoaction   actionfilterattribute

在查询结果上加入列表时出现 Linq 异常(Linq exception when join a list on a query result)

问题 我有一个清单: List<MyClass> lstClass1; 其中 MyClass 有 2 个简单的字符串属性: class MyClass { public string property1 { get; set; } public string property2 { get; set; } } 我在数据库 MyTable 上有一个表要查询,其中有两个字符串类型的列: MyTable column MainKey column AlternativeKey 对于我的脚本,我必须选择 DB 和列表的连接,遵循以下规则:如果 AlternativeKey 存在,则在 AlternativeKey 中的前 4 个字符等于 MyClass.property1 或 MyClass.Property2 时选择该行,否则选择该行如果MainKey 中的前 4 个字符等于 MyClass.property1 或 MyClass.Property2。 这是我的实现: IQueryable<MyTable> source = getMyTable(); List<MyClass> lstClass1 = getListClass(); IQueryable<MyClass> qMyClassList = lstClass1.AsQueryable<MyClass>()

2021-09-21 19:41:49    分类:技术分享    c#   sql   linq   exception   join

如何使用可调整大小的单元格制作 TableLayoutPanel,例如使用 Splitter(How to make TableLayoutPanel with resizable cells like using Splitter)

问题 获得了具有 1 列和 N 行的 TableLayoutPanel,需要使用单元格之间的 Splitter 组件调整单元格的大小。 不使用 SplitContainer。 没有 TableLayoutPanel 可能还有其他想法吗? 回答1 这实际上取决于您想用它做什么: DataGridView带来了交互性,但它的单元格既不是控件也不是容器。 您可以尝试此TableLayoutPanel子类是否满足您的要求: public partial class SplitTablePanel : TableLayoutPanel { public int SplitterSize { get; set; } int sizingRow = -1; int currentRow = -1; Point mdown = Point.Empty; int oldHeight = -1; bool isNormal = false; List<RectangleF> TlpRows = new List<RectangleF>(); int[] rowHeights = new int[0]; public SplitTablePanel() { InitializeComponent(); this.MouseDown += SplitTablePanel_MouseDown; this

2021-09-21 19:40:07    分类:技术分享    c#   winforms   tablelayoutpanel   splitter

如何在绑定 Xamarin.Forms 的 Listview 中创建网格(How To Create a Grid inside a Listview Binding Xamarin.Forms)

问题 如何使用数据绑定在 ListView 内创建网格? 我正在使用 Xamarin.Forms 创建这个应用程序。 如果我不知道需要多少行和列,如何在 ListView 绑定中动态创建 Grid? 这是我到目前为止: <ListView x:Name="List" HasUnevenRows="True"> <ListView.ItemTemplate> <DataTemplate> <ViewCell> <ViewCell.View> <Grid Padding="10,10,10,10"> <Grid.RowDefinitions> <RowDefinition Height="200"></RowDefinition> </Grid.RowDefinitions> <Grid.ColumnDefinitions> <ColumnDefinition Width="200"></ColumnDefinition> </Grid.ColumnDefinitions> <StackLayout BackgroundColor="#313FA0" Grid.Row="0" Grid.Column="0" HeightRequest="200" WidthRequest="200"> <Label Text="{Binding NUMBER}" FontSize="50"

2021-09-21 19:39:23    分类:技术分享    c#   listview   xamarin   xamarin.forms

以编程方式查找和替换 pdf 中的文本(Programmatically find and replace text in pdf)

问题 我正在尝试创建一个 Web 脚本,允许我更改已上传的 PDF 模板并重新输出它们。 我已经尝试过 Zend,它允许我写入 PDF,但这意味着在某些空间中将 PDF 留空,这是我需要的原始空间。 PDFFlip 也好不到哪里去。 我们需要实现功能,以便我们可以从 PDF 中删除内容以及删除和替换。 我看过 CAM::PDF 和 changepagestring.pl,但我不确定它是否适合工作。 我很难找到任何真正的使用示例,而且 Perl 不是我以前使用过的语言。 这是一个 web 项目,但我对我们使用的语言很灵活,理想情况下 PHP 或 ASP.NET C# 会很棒。 除非没有其他方法,否则最好不要使用 Java。 我还应该指出,我在没有任何运气的情况下浏览了 FoxitReader SDK。 我从来没有尝试过实现它,但我发现没有提到查找和替换类似的功能。 回答1 您可以修改 PDF 文本,但仅搜索和替换并非易事。 文本被设计为不便于编辑的结束文件格式。 我在 http://pdf.jpedal.org/java-pdf-blog/bid/12670/PDF-text 写了一篇博文解释了一些问题 回答2 可能作为解决方法,最好以某种更便于编辑的格式保存和填写模板? 例如,您可以将模板保留为 Microsoft Word 模板,然后在填写后将其导出为 PDF。

2021-09-21 19:37:16    分类:技术分享    c#   php   pdf   replace

为什么 float 在声明时显示精确表示(Why float shows exact representation when declared)

问题 我在文章和 MSDN 中多次阅读float (或double )没有真实世界整数或十进制值的精确表示。 正确的 ! 当相等检查出错或断言简单的加法或减法测试时,这是可见的。 也有人说 float 没有像 0.1 这样的十进制值的精确表示,但是如果我们在 Visual Studio 中声明一个 float 像float a = 0.1f; ,他们如何在调试时显示精确的 0.1? 它应该显示类似0.09999999.. 。 我在哪里错过了一个链接来理解它。 这是一个外行的问题,或者可能是我仍然缺少一些概念! 回答1 他们如何在调试时显示精确的 0.1 0.1 不是浮点数的确切值。 它恰好是您在原始分配中指定的值,但这不是浮点数的值。 我可以看到它令人困惑:) 我怀疑调试器正在显示最短的字符串表示,它明确地以相同的值结束。 尝试使用: float a = 0.0999999999f; ...然后我怀疑在调试器中你也会看到它是0.1 。 因此,调试器并不是显示“更精确”的值——而是它显示的是“更普遍方便”的表示。 如果您想显示存储在浮点数或双精度数中的确切值,我有一些代码可供您使用。

2021-09-21 19:35:34    分类:技术分享    c#   c++   .net   floating-point