Saturday, December 31, 2022

List Capacity vs Count

 That's correct! In the .NET framework, the List<T> class is implemented as an array that grows dynamically as items are added to it. The Capacity property represents the size of the underlying array, and the Count property represents the number of items that have been added to the list.


When you add an item to the list and the list is already at capacity, the List<T> class will automatically double the size of the underlying array and copy all of the items from the old array to the new one. This process is known as "resizing the array."


It's important to note that the Capacity property is not the same as the Count property. The Capacity property represents the size of the underlying array, while the Count property represents the number of items that have been added to the list. The Count property will always be less than or equal to the Capacity property.


For example, if you have a list with a capacity of 10 and you add 5 items to it, the Count property will be 5 and the Capacity property will be 10. If you then add another item to the list, the list will automatically resize the array and the Capacity property will be increased to 20. However, the Count property will still be 6.

Tuesday, December 27, 2022

Dependency Injection (DI)


The Dependency Injection pattern is a particular implementation of Inversion of Control. Inversion of Control (IoC) means that objects do not create other objects on which they rely to do their work. Instead, they get the objects that they need from an outside source (for example, an xml configuration file).



Dependency Injection (DI) means that this is done without the object intervention, usually by a framework component that passes constructor parameters and set properties.



The advantages of using Dependency Injection pattern and Inversion of Control are the following:
  • Reduces class coupling
  • Increases code reusing
  • Improves code maintainability
  • Improves application testing

    The principle say that "High level module should not depend upon the low level module, both should depend on abstraction. Details should depends upon abstraction". 



    Basically, instead of having your objects creating a dependency or asking a factory object to make one for them, you pass the needed dependencies in to the constructor or via property setters, and you make it somebody else's problem (an object further up the dependency graph, or a dependency injector that builds the dependency graph). A dependency as I'm using it here is any other object the current object needs to hold a reference to.
    One of the major advantages of dependency injection is that it can make testing lots easier. Suppose you have an object which in its constructor does something like:
    public SomeClass() {
        myObject = Factory.getObject();
    }
    
    This can be troublesome when all you want to do is run some unit tests on SomeClass, especially if myObject is something that does complex disk or network access. So now you're looking at mocking myObject but also somehow intercepting the factory call. Hard. Instead, pass the object in as an argument to the constructor. Now you've moved the problem elsewhere, but testing can become lots easier. Just make a dummy myObject and pass that in. The constructor would now look a bit like:
    public SomeClass (MyClass myObject) {
        this.myObject = myObject;
    }
    

C# DateTime from Excel turns into float number

 In Excel, dates and times are stored as a floating point number representing the number of days since the epoch date of January 1, 1970. This means that when you read a date or time value from an Excel file into a C# DateTime object, you will need to convert the floating point value to a DateTime object.


Here is an example of how you could do this in C#:


// Assume that the Excel date value is stored in a variable called "excelDate" // Convert the Excel date value to a DateTime object DateTime dateTime = DateTime.FromOADate(excelDate); // You can also use the following syntax to achieve the same result: // DateTime dateTime = new DateTime((long)(excelDate * 86400000) + new DateTime(1970, 1, 1).Ticks);


In this example, the FromOADate method is used to convert the Excel date value to a DateTime object. This method is part of the System.DateTime struct and takes a floating point value representing the number of days since the epoch date.

Alternatively, you can use the Ticks property of the DateTime struct and some simple math to convert the Excel date value to a DateTime object. In this case, the value is first converted to a number of ticks (multiplying it by the number of ticks per day), and then the resulting ticks are



How cache can be enabled for embeded text as well for search query results in Azure AI ?

 Great question, Rahul! Caching in the context of Azure AI (especially when using **RAG pipelines with Azure OpenAI + Azure AI Search**) can...